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)