diff options
| author | rcitachi <[email protected]> | 2024-08-23 05:53:18 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-08-22 17:53:18 -0400 |
| commit | 9a84c13b2e1d4f896d5016f7422e7d515796be1f (patch) | |
| tree | 9b343850b8544d68acbd80b7467568905ea1749d | |
| parent | 9d95ad9b8d732a7c07183f473cd12ba1cca906a2 (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.c | 12 | ||||
| -rw-r--r-- | components/lwp/lwp_syscall.c | 2 |
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) |
