summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrcitachi <[email protected]>2024-08-23 05:53:18 +0800
committerGitHub <[email protected]>2024-08-22 17:53:18 -0400
commit9a84c13b2e1d4f896d5016f7422e7d515796be1f (patch)
tree9b343850b8544d68acbd80b7467568905ea1749d
parent9d95ad9b8d732a7c07183f473cd12ba1cca906a2 (diff)
[lwp] Implementation of setpgrp and fix mmap2 problems (#9308)
* mmap2 failure handling 当传入一个非常大的地址时,offset会计算得到一个值,又因为传入的地址错误,rc会得到错误码,结合offset会得到一个很奇怪的值。 * Implementation of setpgrp 执行setpgrp会走到这一步,在执行getpgrp无法得到创建的group的值 * Modify the return method of mmap
-rw-r--r--components/lwp/lwp_pgrp.c12
-rw-r--r--components/lwp/lwp_syscall.c2
2 files changed, 13 insertions, 1 deletions
diff --git a/components/lwp/lwp_pgrp.c b/components/lwp/lwp_pgrp.c
index 700565b165..b699e124d3 100644
--- a/components/lwp/lwp_pgrp.c
+++ b/components/lwp/lwp_pgrp.c
@@ -403,6 +403,18 @@ sysret_t sys_setpgid(pid_t pid, pid_t pgid)
if (group == RT_NULL)
{
group = lwp_pgrp_create(process);
+ lwp_pgrp_move(group, process);
+ session = lwp_session_find(sid);
+ if (session == RT_NULL)
+ {
+ LOG_E("the session of sid: %d cannot be found", sid);
+ err = -EPERM;
+ goto exit;
+ }
+ else
+ {
+ lwp_session_insert(session, group);
+ }
}
else
{
diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c
index e4c373acb3..90e881abbb 100644
--- a/components/lwp/lwp_syscall.c
+++ b/components/lwp/lwp_syscall.c
@@ -1229,7 +1229,7 @@ void *sys_mmap2(void *addr, size_t length, int prot,
rc = (sysret_t)lwp_mmap2(lwp_self(), addr, length, prot, flags, fd, pgoffset);
}
- return (char *)rc + offset;
+ return rc < 0 ? (char *)rc : (char *)rc + offset;
}
sysret_t sys_munmap(void *addr, size_t length)