From 9a84c13b2e1d4f896d5016f7422e7d515796be1f Mon Sep 17 00:00:00 2001 From: rcitachi Date: Fri, 23 Aug 2024 05:53:18 +0800 Subject: [PATCH] [lwp] Implementation of setpgrp and fix mmap2 problems (#9308) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * mmap2 failure handling 当传入一个非常大的地址时,offset会计算得到一个值,又因为传入的地址错误,rc会得到错误码,结合offset会得到一个很奇怪的值。 * Implementation of setpgrp 执行setpgrp会走到这一步,在执行getpgrp无法得到创建的group的值 * Modify the return method of mmap --- components/lwp/lwp_pgrp.c | 12 ++++++++++++ components/lwp/lwp_syscall.c | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) 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)