summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/sysdeps/linux/common/setegid.c4
-rw-r--r--libc/sysdeps/linux/common/seteuid.c4
-rw-r--r--libc/sysdeps/linux/common/setresgid.c12
-rw-r--r--libc/sysdeps/linux/common/setresuid.c12
4 files changed, 22 insertions, 10 deletions
diff --git a/libc/sysdeps/linux/common/setegid.c b/libc/sysdeps/linux/common/setegid.c
index 92ef3a05d..e0bbfd4bc 100644
--- a/libc/sysdeps/linux/common/setegid.c
+++ b/libc/sysdeps/linux/common/setegid.c
@@ -11,7 +11,7 @@
#include <sys/types.h>
#include <sys/syscall.h>
-#if defined __NR_setresgid && defined __USE_GNU
+#if defined __NR_setresgid || defined __NR_setresgid32
libc_hidden_proto(setresgid)
#endif
libc_hidden_proto(setregid)
@@ -26,7 +26,7 @@ int setegid(gid_t gid)
return -1;
}
-#if defined __NR_setresgid && defined __USE_GNU
+#if defined __NR_setresgid || defined __NR_setresgid32
result = setresgid(-1, gid, -1);
if (result == -1 && errno == ENOSYS)
/* Will also set the saved group ID if egid != gid,
diff --git a/libc/sysdeps/linux/common/seteuid.c b/libc/sysdeps/linux/common/seteuid.c
index 6d8c9ae3e..e5ed576ff 100644
--- a/libc/sysdeps/linux/common/seteuid.c
+++ b/libc/sysdeps/linux/common/seteuid.c
@@ -13,7 +13,7 @@
libc_hidden_proto(seteuid)
-#if defined __NR_setresuid && defined __USE_GNU
+#if defined __NR_setresuid || defined __NR_setresuid32
libc_hidden_proto(setresuid)
#endif
libc_hidden_proto(setreuid)
@@ -28,7 +28,7 @@ int seteuid(uid_t uid)
return -1;
}
-#if defined __NR_setresuid && defined __USE_GNU
+#if defined __NR_setresuid || defined __NR_setresuid32
result = setresuid(-1, uid, -1);
if (result == -1 && errno == ENOSYS)
/* Will also set the saved user ID if euid != uid,
diff --git a/libc/sysdeps/linux/common/setresgid.c b/libc/sysdeps/linux/common/setresgid.c
index 40e9e8a11..51bc5e2a8 100644
--- a/libc/sysdeps/linux/common/setresgid.c
+++ b/libc/sysdeps/linux/common/setresgid.c
@@ -10,10 +10,15 @@
#include "syscalls.h"
#include <unistd.h>
-#if defined __NR_setresgid && defined __USE_GNU
libc_hidden_proto(setresgid)
-#define __NR___syscall_setresgid __NR_setresgid
+#if defined(__NR_setresgid32)
+# undef __NR_setresgid
+# define __NR_setresgid __NR_setresgid32
+_syscall3(int, setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
+
+#elif defined(__NR_setresgid)
+# define __NR___syscall_setresgid __NR_setresgid
static inline _syscall3(int, __syscall_setresgid,
__kernel_gid_t, rgid, __kernel_gid_t, egid, __kernel_gid_t, sgid);
@@ -27,5 +32,6 @@ int setresgid(gid_t rgid, gid_t egid, gid_t sgid)
}
return (__syscall_setresgid(rgid, egid, sgid));
}
-libc_hidden_def(setresgid)
#endif
+
+libc_hidden_def(setresgid)
diff --git a/libc/sysdeps/linux/common/setresuid.c b/libc/sysdeps/linux/common/setresuid.c
index dd1915706..2d8122349 100644
--- a/libc/sysdeps/linux/common/setresuid.c
+++ b/libc/sysdeps/linux/common/setresuid.c
@@ -10,10 +10,15 @@
#include "syscalls.h"
#include <unistd.h>
-#if defined __NR_setresuid && defined __USE_GNU
libc_hidden_proto(setresuid)
-#define __NR___syscall_setresuid __NR_setresuid
+#if defined(__NR_setresuid32)
+# undef __NR_setresuid
+# define __NR_setresuid __NR_setresuid32
+_syscall3(int, setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
+
+#elif defined(__NR_setresuid)
+# define __NR___syscall_setresuid __NR_setresuid
static inline _syscall3(int, __syscall_setresuid,
__kernel_uid_t, rgid, __kernel_uid_t, egid, __kernel_uid_t, sgid);
@@ -27,5 +32,6 @@ int setresuid(uid_t ruid, uid_t euid, uid_t suid)
}
return (__syscall_setresuid(ruid, euid, suid));
}
-libc_hidden_def(setresuid)
#endif
+
+libc_hidden_def(setresuid)