mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 07:02:03 -06:00
linux-user: Fix setreuid and setregid to use direct syscalls
The commitfd6f7798ac
("linux-user: Use direct syscalls for setuid(), etc") added direct syscall wrappers for setuid(), setgid(), etc since the system calls have different semantics than the libc functions. Add and use the corresponding wrappers for setreuid and setregid which were missed in that commit. This fixes the build of the debian package of the uid_wrapper library (https://cwrap.org/uid_wrapper.html) when running linux-user. Cc: qemu-stable@nongnu.org Signed-off-by: Helge Deller <deller@gmx.de> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-ID: <Zyo2jMKqq8hG8Pkz@p100> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> (cherry picked from commit8491026a08
) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
7ca2aa5f53
commit
b8fb4b2633
1 changed files with 16 additions and 4 deletions
|
@ -7215,12 +7215,24 @@ static inline int tswapid(int id)
|
|||
#else
|
||||
#define __NR_sys_setgroups __NR_setgroups
|
||||
#endif
|
||||
#ifdef __NR_sys_setreuid32
|
||||
#define __NR_sys_setreuid __NR_setreuid32
|
||||
#else
|
||||
#define __NR_sys_setreuid __NR_setreuid
|
||||
#endif
|
||||
#ifdef __NR_sys_setregid32
|
||||
#define __NR_sys_setregid __NR_setregid32
|
||||
#else
|
||||
#define __NR_sys_setregid __NR_setregid
|
||||
#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)
|
||||
_syscall2(int, sys_setreuid, uid_t, ruid, uid_t, euid);
|
||||
_syscall2(int, sys_setregid, gid_t, rgid, gid_t, egid);
|
||||
|
||||
void syscall_init(void)
|
||||
{
|
||||
|
@ -11840,9 +11852,9 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|
|||
return get_errno(high2lowgid(getegid()));
|
||||
#endif
|
||||
case TARGET_NR_setreuid:
|
||||
return get_errno(setreuid(low2highuid(arg1), low2highuid(arg2)));
|
||||
return get_errno(sys_setreuid(low2highuid(arg1), low2highuid(arg2)));
|
||||
case TARGET_NR_setregid:
|
||||
return get_errno(setregid(low2highgid(arg1), low2highgid(arg2)));
|
||||
return get_errno(sys_setregid(low2highgid(arg1), low2highgid(arg2)));
|
||||
case TARGET_NR_getgroups:
|
||||
{ /* the same code as for TARGET_NR_getgroups32 */
|
||||
int gidsetsize = arg1;
|
||||
|
@ -12172,11 +12184,11 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
|
|||
#endif
|
||||
#ifdef TARGET_NR_setreuid32
|
||||
case TARGET_NR_setreuid32:
|
||||
return get_errno(setreuid(arg1, arg2));
|
||||
return get_errno(sys_setreuid(arg1, arg2));
|
||||
#endif
|
||||
#ifdef TARGET_NR_setregid32
|
||||
case TARGET_NR_setregid32:
|
||||
return get_errno(setregid(arg1, arg2));
|
||||
return get_errno(sys_setregid(arg1, arg2));
|
||||
#endif
|
||||
#ifdef TARGET_NR_getgroups32
|
||||
case TARGET_NR_getgroups32:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue