@@ -7802,6 +7802,21 @@ IMPL(chown)
}
#endif
+#ifdef TARGET_NR_chown32
+IMPL(chown32)
+{
+ char *p = lock_user_string(arg1);
+ abi_long ret;
+
+ if (!p) {
+ return -TARGET_EFAULT;
+ }
+ ret = get_errno(chown(p, arg2, arg3));
+ unlock_user(p, arg1, 0);
+ return ret;
+}
+#endif
+
IMPL(chroot)
{
char *p = lock_user_string(arg1);
@@ -10815,16 +10830,37 @@ IMPL(setfsgid)
return get_errno(setfsgid(arg1));
}
+#ifdef TARGET_NR_setfsgid32
+IMPL(setfsgid32)
+{
+ return get_errno(setfsgid(arg1));
+}
+#endif
+
IMPL(setfsuid)
{
return get_errno(setfsuid(arg1));
}
+#ifdef TARGET_NR_setfsuid32
+IMPL(setfsuid32)
+{
+ return get_errno(setfsuid(arg1));
+}
+#endif
+
IMPL(setgid)
{
return get_errno(sys_setgid(low2highgid(arg1)));
}
+#ifdef TARGET_NR_setgid32
+IMPL(setgid32)
+{
+ return get_errno(sys_setgid(arg1));
+}
+#endif
+
IMPL(setgroups)
{
int gidsetsize = arg1;
@@ -11017,6 +11053,13 @@ IMPL(setuid)
return get_errno(sys_setuid(low2highuid(arg1)));
}
+#ifdef TARGET_NR_setuid32
+IMPL(setuid32)
+{
+ return get_errno(sys_setuid(arg1));
+}
+#endif
+
#ifdef TARGET_NR_sigaction
IMPL(sigaction)
{
@@ -11943,30 +11986,6 @@ static abi_long do_syscall1(void *cpu_env, unsigned num, abi_long arg1,
void *p;
switch(num) {
-#ifdef TARGET_NR_chown32
- case TARGET_NR_chown32:
- if (!(p = lock_user_string(arg1)))
- return -TARGET_EFAULT;
- ret = get_errno(chown(p, arg2, arg3));
- unlock_user(p, arg1, 0);
- return ret;
-#endif
-#ifdef TARGET_NR_setuid32
- case TARGET_NR_setuid32:
- return get_errno(sys_setuid(arg1));
-#endif
-#ifdef TARGET_NR_setgid32
- case TARGET_NR_setgid32:
- return get_errno(sys_setgid(arg1));
-#endif
-#ifdef TARGET_NR_setfsuid32
- case TARGET_NR_setfsuid32:
- return get_errno(setfsuid(arg1));
-#endif
-#ifdef TARGET_NR_setfsgid32
- case TARGET_NR_setfsgid32:
- return get_errno(setfsgid(arg1));
-#endif
#ifdef TARGET_NR_mincore
case TARGET_NR_mincore:
{
@@ -13139,6 +13158,9 @@ static impl_fn *syscall_table(unsigned num)
#endif
#ifdef TARGET_NR_chown
SYSCALL(chown);
+#endif
+#ifdef TARGET_NR_chown32
+ SYSCALL(chown32);
#endif
SYSCALL(chroot);
#ifdef TARGET_NR_connect
@@ -13492,8 +13514,17 @@ static impl_fn *syscall_table(unsigned num)
#endif
SYSCALL(setdomainname);
SYSCALL(setfsgid);
+#ifdef TARGET_NR_setfsgid32
+ SYSCALL(setfsgid32);
+#endif
SYSCALL(setfsuid);
+#ifdef TARGET_NR_setfsuid32
+ SYSCALL(setfsuid32);
+#endif
SYSCALL(setgid);
+#ifdef TARGET_NR_setgid32
+ SYSCALL(setgid32);
+#endif
SYSCALL(setgroups);
#ifdef TARGET_NR_setgroups32
SYSCALL(setgroups32);
@@ -13529,6 +13560,9 @@ static impl_fn *syscall_table(unsigned num)
SYSCALL(settimeofday);
SYSCALL(setsid);
SYSCALL(setuid);
+#ifdef TARGET_NR_setuid32
+ SYSCALL(setuid32);
+#endif
#ifdef TARGET_NR_sigaction
SYSCALL(sigaction);
#endif
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- linux-user/syscall.c | 82 +++++++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 24 deletions(-) -- 2.17.1