sparc64: Use kernel/uid16.c helpers instead of own copy.
Noticed by Adrian Bunk. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f8d91faff3
commit
ea771bd51c
2 changed files with 10 additions and 186 deletions
|
@ -58,182 +58,6 @@
|
|||
#include <asm/mmu_context.h>
|
||||
#include <asm/compat_signal.h>
|
||||
|
||||
asmlinkage long sys32_chown16(const char __user * filename, u16 user, u16 group)
|
||||
{
|
||||
return sys_chown(filename, low2highuid(user), low2highgid(group));
|
||||
}
|
||||
|
||||
asmlinkage long sys32_lchown16(const char __user * filename, u16 user, u16 group)
|
||||
{
|
||||
return sys_lchown(filename, low2highuid(user), low2highgid(group));
|
||||
}
|
||||
|
||||
asmlinkage long sys32_fchown16(unsigned int fd, u16 user, u16 group)
|
||||
{
|
||||
return sys_fchown(fd, low2highuid(user), low2highgid(group));
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setregid16(u16 rgid, u16 egid)
|
||||
{
|
||||
return sys_setregid(low2highgid(rgid), low2highgid(egid));
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setgid16(u16 gid)
|
||||
{
|
||||
return sys_setgid((gid_t)gid);
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setreuid16(u16 ruid, u16 euid)
|
||||
{
|
||||
return sys_setreuid(low2highuid(ruid), low2highuid(euid));
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setuid16(u16 uid)
|
||||
{
|
||||
return sys_setuid((uid_t)uid);
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setresuid16(u16 ruid, u16 euid, u16 suid)
|
||||
{
|
||||
return sys_setresuid(low2highuid(ruid), low2highuid(euid),
|
||||
low2highuid(suid));
|
||||
}
|
||||
|
||||
asmlinkage long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid)
|
||||
{
|
||||
int retval;
|
||||
|
||||
if (!(retval = put_user(high2lowuid(current->uid), ruid)) &&
|
||||
!(retval = put_user(high2lowuid(current->euid), euid)))
|
||||
retval = put_user(high2lowuid(current->suid), suid);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setresgid16(u16 rgid, u16 egid, u16 sgid)
|
||||
{
|
||||
return sys_setresgid(low2highgid(rgid), low2highgid(egid),
|
||||
low2highgid(sgid));
|
||||
}
|
||||
|
||||
asmlinkage long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid)
|
||||
{
|
||||
int retval;
|
||||
|
||||
if (!(retval = put_user(high2lowgid(current->gid), rgid)) &&
|
||||
!(retval = put_user(high2lowgid(current->egid), egid)))
|
||||
retval = put_user(high2lowgid(current->sgid), sgid);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setfsuid16(u16 uid)
|
||||
{
|
||||
return sys_setfsuid((uid_t)uid);
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setfsgid16(u16 gid)
|
||||
{
|
||||
return sys_setfsgid((gid_t)gid);
|
||||
}
|
||||
|
||||
static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
|
||||
{
|
||||
int i;
|
||||
u16 group;
|
||||
|
||||
for (i = 0; i < group_info->ngroups; i++) {
|
||||
group = (u16)GROUP_AT(group_info, i);
|
||||
if (put_user(group, grouplist+i))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int groups16_from_user(struct group_info *group_info, u16 __user *grouplist)
|
||||
{
|
||||
int i;
|
||||
u16 group;
|
||||
|
||||
for (i = 0; i < group_info->ngroups; i++) {
|
||||
if (get_user(group, grouplist+i))
|
||||
return -EFAULT;
|
||||
GROUP_AT(group_info, i) = (gid_t)group;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_getgroups16(int gidsetsize, u16 __user *grouplist)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gidsetsize < 0)
|
||||
return -EINVAL;
|
||||
|
||||
get_group_info(current->group_info);
|
||||
i = current->group_info->ngroups;
|
||||
if (gidsetsize) {
|
||||
if (i > gidsetsize) {
|
||||
i = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (groups16_to_user(grouplist, current->group_info)) {
|
||||
i = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
out:
|
||||
put_group_info(current->group_info);
|
||||
return i;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_setgroups16(int gidsetsize, u16 __user *grouplist)
|
||||
{
|
||||
struct group_info *group_info;
|
||||
int retval;
|
||||
|
||||
if (!capable(CAP_SETGID))
|
||||
return -EPERM;
|
||||
if ((unsigned)gidsetsize > NGROUPS_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
group_info = groups_alloc(gidsetsize);
|
||||
if (!group_info)
|
||||
return -ENOMEM;
|
||||
retval = groups16_from_user(group_info, grouplist);
|
||||
if (retval) {
|
||||
put_group_info(group_info);
|
||||
return retval;
|
||||
}
|
||||
|
||||
retval = set_current_groups(group_info);
|
||||
put_group_info(group_info);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
asmlinkage long sys32_getuid16(void)
|
||||
{
|
||||
return high2lowuid(current->uid);
|
||||
}
|
||||
|
||||
asmlinkage long sys32_geteuid16(void)
|
||||
{
|
||||
return high2lowuid(current->euid);
|
||||
}
|
||||
|
||||
asmlinkage long sys32_getgid16(void)
|
||||
{
|
||||
return high2lowgid(current->gid);
|
||||
}
|
||||
|
||||
asmlinkage long sys32_getegid16(void)
|
||||
{
|
||||
return high2lowgid(current->egid);
|
||||
}
|
||||
|
||||
/* 32-bit timeval and related flotsam. */
|
||||
|
||||
static inline long put_tv32(struct compat_timeval __user *o, struct timeval *i)
|
||||
|
|
|
@ -20,21 +20,21 @@
|
|||
sys_call_table32:
|
||||
/*0*/ .word sys_restart_syscall, sys32_exit, sys_fork, sys_read, sys_write
|
||||
/*5*/ .word sys32_open, sys_close, sys32_wait4, sys32_creat, sys_link
|
||||
/*10*/ .word sys_unlink, sunos_execv, sys_chdir, sys32_chown16, sys32_mknod
|
||||
/*15*/ .word sys_chmod, sys32_lchown16, sparc_brk, sys32_perfctr, sys32_lseek
|
||||
/*20*/ .word sys_getpid, sys_capget, sys_capset, sys32_setuid16, sys32_getuid16
|
||||
/*10*/ .word sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys32_mknod
|
||||
/*15*/ .word sys_chmod, sys_lchown16, sparc_brk, sys32_perfctr, sys32_lseek
|
||||
/*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16
|
||||
/*25*/ .word sys32_vmsplice, compat_sys_ptrace, sys_alarm, sys32_sigaltstack, sys32_pause
|
||||
/*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice
|
||||
.word sys_chown, sys_sync, sys32_kill, compat_sys_newstat, sys32_sendfile
|
||||
/*40*/ .word compat_sys_newlstat, sys_dup, sys_pipe, compat_sys_times, sys_getuid
|
||||
.word sys32_umount, sys32_setgid16, sys32_getgid16, sys32_signal, sys32_geteuid16
|
||||
/*50*/ .word sys32_getegid16, sys_acct, sys_nis_syscall, sys_getgid, compat_sys_ioctl
|
||||
.word sys32_umount, sys_setgid16, sys_getgid16, sys32_signal, sys_geteuid16
|
||||
/*50*/ .word sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, compat_sys_ioctl
|
||||
.word sys32_reboot, sys32_mmap2, sys_symlink, sys32_readlink, sys32_execve
|
||||
/*60*/ .word sys32_umask, sys_chroot, compat_sys_newfstat, compat_sys_fstat64, sys_getpagesize
|
||||
.word sys32_msync, sys_vfork, sys32_pread64, sys32_pwrite64, sys_geteuid
|
||||
/*70*/ .word sys_getegid, sys_mmap, sys_setreuid, sys_munmap, sys_mprotect
|
||||
.word sys_madvise, sys_vhangup, sys32_truncate64, sys_mincore, sys32_getgroups16
|
||||
/*80*/ .word sys32_setgroups16, sys_getpgrp, sys32_setgroups, sys32_setitimer, sys32_ftruncate64
|
||||
.word sys_madvise, sys_vhangup, sys32_truncate64, sys_mincore, sys_getgroups16
|
||||
/*80*/ .word sys_setgroups16, sys_getpgrp, sys32_setgroups, sys32_setitimer, sys32_ftruncate64
|
||||
.word sys32_swapon, sys32_getitimer, sys_setuid, sys32_sethostname, sys_setgid
|
||||
/*90*/ .word sys_dup2, sys_setfsuid, compat_sys_fcntl, sys32_select, sys_setfsgid
|
||||
.word sys_fsync, sys32_setpriority, sys_nis_syscall, sys_nis_syscall, sys_nis_syscall
|
||||
|
@ -42,8 +42,8 @@ sys_call_table32:
|
|||
.word compat_sys_rt_sigtimedwait, sys32_rt_sigqueueinfo, compat_sys_rt_sigsuspend, sys_setresuid, sys_getresuid
|
||||
/*110*/ .word sys_setresgid, sys_getresgid, sys_setregid, sys_nis_syscall, sys_nis_syscall
|
||||
.word sys32_getgroups, sys32_gettimeofday, sys32_getrusage, sys_nis_syscall, sys_getcwd
|
||||
/*120*/ .word compat_sys_readv, compat_sys_writev, sys32_settimeofday, sys32_fchown16, sys_fchmod
|
||||
.word sys_nis_syscall, sys32_setreuid16, sys32_setregid16, sys_rename, sys_truncate
|
||||
/*120*/ .word compat_sys_readv, compat_sys_writev, sys32_settimeofday, sys_fchown16, sys_fchmod
|
||||
.word sys_nis_syscall, sys_setreuid16, sys_setregid16, sys_rename, sys_truncate
|
||||
/*130*/ .word sys_ftruncate, sys_flock, compat_sys_lstat64, sys_nis_syscall, sys_nis_syscall
|
||||
.word sys_nis_syscall, sys32_mkdir, sys_rmdir, compat_sys_utimes, compat_sys_stat64
|
||||
/*140*/ .word sys32_sendfile64, sys_nis_syscall, sys32_futex, sys_gettid, compat_sys_getrlimit
|
||||
|
@ -63,7 +63,7 @@ sys_call_table32:
|
|||
/*210*/ .word sys32_fadvise64_64, sys32_tgkill, sys32_waitpid, sys_swapoff, compat_sys_sysinfo
|
||||
.word compat_sys_ipc, sys32_sigreturn, sys_clone, sys32_ioprio_get, compat_sys_adjtimex
|
||||
/*220*/ .word sys32_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys32_getpgid
|
||||
.word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16
|
||||
.word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys_setfsuid16, sys_setfsgid16
|
||||
/*230*/ .word sys32_select, compat_sys_time, sys32_splice, compat_sys_stime, compat_sys_statfs64
|
||||
.word compat_sys_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys32_mlockall
|
||||
/*240*/ .word sys_munlockall, sys32_sched_setparam, sys32_sched_getparam, sys32_sched_setscheduler, sys32_sched_getscheduler
|
||||
|
|
Loading…
Reference in a new issue