mirror of https://github.com/xemu-project/xemu.git
linux-user: Make TARGET_NR_setgroups affect only the current thread
Like TARGET_NR_setuid, TARGET_NR_setgroups should affect only the
calling thread, and not the entire process. Therefore, implement it
using a syscall, and not a libc call.
Cc: qemu-stable@nongnu.org
Fixes: 19b84f3c35
("added setgroups and getgroups syscalls")
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20240614154710.1078766-1-iii@linux.ibm.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
3b279f73fa
commit
54b2792102
|
@ -7209,11 +7209,17 @@ static inline int tswapid(int id)
|
|||
#else
|
||||
#define __NR_sys_setresgid __NR_setresgid
|
||||
#endif
|
||||
#ifdef __NR_setgroups32
|
||||
#define __NR_sys_setgroups __NR_setgroups32
|
||||
#else
|
||||
#define __NR_sys_setgroups __NR_setgroups
|
||||
#endif
|
||||
|
||||
_syscall1(int, sys_setuid, uid_t, uid)
|
||||
_syscall1(int, sys_setgid, gid_t, gid)
|
||||
_syscall3(int, sys_setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
|
||||
_syscall3(int, sys_setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
|
||||
_syscall2(int, sys_setgroups, int, size, gid_t *, grouplist)
|
||||
|
||||
void syscall_init(void)
|
||||
{
|
||||
|
@ -11891,7 +11897,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|
|||
unlock_user(target_grouplist, arg2,
|
||||
gidsetsize * sizeof(target_id));
|
||||
}
|
||||
return get_errno(setgroups(gidsetsize, grouplist));
|
||||
return get_errno(sys_setgroups(gidsetsize, grouplist));
|
||||
}
|
||||
case TARGET_NR_fchown:
|
||||
return get_errno(fchown(arg1, low2highuid(arg2), low2highgid(arg3)));
|
||||
|
@ -12227,7 +12233,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|
|||
}
|
||||
unlock_user(target_grouplist, arg2, 0);
|
||||
}
|
||||
return get_errno(setgroups(gidsetsize, grouplist));
|
||||
return get_errno(sys_setgroups(gidsetsize, grouplist));
|
||||
}
|
||||
#endif
|
||||
#ifdef TARGET_NR_fchown32
|
||||
|
|
Loading…
Reference in New Issue