Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Pull compat cleanup from Al Viro:
"Mostly about syscall wrappers this time; there will be another pile
with patches in the same general area from various people, but I'd
rather push those after both that and vfs.git pile are in."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
syscalls.h: slightly reduce the jungles of macros
get rid of union semop in sys_semctl(2) arguments
make do_mremap() static
sparc: no need to sign-extend in sync_file_range() wrapper
ppc compat wrappers for add_key(2) and request_key(2) are pointless
x86: trim sys_ia32.h
x86: sys32_kill and sys32_mprotect are pointless
get rid of compat_sys_semctl() and friends in case of ARCH_WANT_OLD_COMPAT_IPC
merge compat sys_ipc instances
consolidate compat lookup_dcookie()
convert vmsplice to COMPAT_SYSCALL_DEFINE
switch getrusage() to COMPAT_SYSCALL_DEFINE
switch epoll_pwait to COMPAT_SYSCALL_DEFINE
convert sendfile{,64} to COMPAT_SYSCALL_DEFINE
switch signalfd{,4}() to COMPAT_SYSCALL_DEFINE
make SYSCALL_DEFINE<n>-generated wrappers do asmlinkage_protect
make HAVE_SYSCALL_WRAPPERS unconditional
consolidate cond_syscall and SYSCALL_ALIAS declarations
teach SYSCALL_DEFINE<n> how to deal with long long/unsigned long long
get rid of duplicate logics in __SC_....[1-6] definitions
This commit is contained in:
@@ -516,25 +516,6 @@ int put_compat_rusage(const struct rusage *r, struct compat_rusage __user *ru)
|
||||
return 0;
|
||||
}
|
||||
|
||||
asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru)
|
||||
{
|
||||
struct rusage r;
|
||||
int ret;
|
||||
mm_segment_t old_fs = get_fs();
|
||||
|
||||
set_fs(KERNEL_DS);
|
||||
ret = sys_getrusage(who, (struct rusage __user *) &r);
|
||||
set_fs(old_fs);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (put_compat_rusage(&r, ru))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE4(wait4,
|
||||
compat_pid_t, pid,
|
||||
compat_uint_t __user *, stat_addr,
|
||||
|
||||
@@ -1629,9 +1629,6 @@ SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *,
|
||||
}
|
||||
|
||||
put_pid(pid);
|
||||
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(5, ret, which, upid, infop, options, ru);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1669,8 +1666,6 @@ SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr,
|
||||
ret = do_wait(&wo);
|
||||
put_pid(pid);
|
||||
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(4, ret, upid, stat_addr, options, ru);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
+1
-4
@@ -1677,10 +1677,7 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
|
||||
int, tls_val)
|
||||
#endif
|
||||
{
|
||||
long ret = do_fork(clone_flags, newsp, 0, parent_tidptr, child_tidptr);
|
||||
asmlinkage_protect(5, ret, clone_flags, newsp,
|
||||
parent_tidptr, child_tidptr, tls_val);
|
||||
return ret;
|
||||
return do_fork(clone_flags, newsp, 0, parent_tidptr, child_tidptr);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1851,6 +1851,20 @@ SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru)
|
||||
return getrusage(current, who, ru);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
COMPAT_SYSCALL_DEFINE2(getrusage, int, who, struct compat_rusage __user *, ru)
|
||||
{
|
||||
struct rusage r;
|
||||
|
||||
if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN &&
|
||||
who != RUSAGE_THREAD)
|
||||
return -EINVAL;
|
||||
|
||||
k_getrusage(current, who, &r);
|
||||
return put_compat_rusage(&r, ru);
|
||||
}
|
||||
#endif
|
||||
|
||||
SYSCALL_DEFINE1(umask, int, mask)
|
||||
{
|
||||
mask = xchg(¤t->fs->umask, mask & S_IRWXUGO);
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@ cond_syscall(sys_quotactl);
|
||||
cond_syscall(sys32_quotactl);
|
||||
cond_syscall(sys_acct);
|
||||
cond_syscall(sys_lookup_dcookie);
|
||||
cond_syscall(compat_sys_lookup_dcookie);
|
||||
cond_syscall(sys_swapon);
|
||||
cond_syscall(sys_swapoff);
|
||||
cond_syscall(sys_kexec_load);
|
||||
@@ -155,7 +156,7 @@ cond_syscall(compat_sys_process_vm_writev);
|
||||
cond_syscall(sys_pciconfig_read);
|
||||
cond_syscall(sys_pciconfig_write);
|
||||
cond_syscall(sys_pciconfig_iobase);
|
||||
cond_syscall(sys32_ipc);
|
||||
cond_syscall(compat_sys_s390_ipc);
|
||||
cond_syscall(ppc_rtas);
|
||||
cond_syscall(sys_spu_run);
|
||||
cond_syscall(sys_spu_create);
|
||||
|
||||
+11
-44
@@ -18,67 +18,43 @@
|
||||
|
||||
SYSCALL_DEFINE3(chown16, const char __user *, filename, old_uid_t, user, old_gid_t, group)
|
||||
{
|
||||
long ret = sys_chown(filename, low2highuid(user), low2highgid(group));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(3, ret, filename, user, group);
|
||||
return ret;
|
||||
return sys_chown(filename, low2highuid(user), low2highgid(group));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE3(lchown16, const char __user *, filename, old_uid_t, user, old_gid_t, group)
|
||||
{
|
||||
long ret = sys_lchown(filename, low2highuid(user), low2highgid(group));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(3, ret, filename, user, group);
|
||||
return ret;
|
||||
return sys_lchown(filename, low2highuid(user), low2highgid(group));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE3(fchown16, unsigned int, fd, old_uid_t, user, old_gid_t, group)
|
||||
{
|
||||
long ret = sys_fchown(fd, low2highuid(user), low2highgid(group));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(3, ret, fd, user, group);
|
||||
return ret;
|
||||
return sys_fchown(fd, low2highuid(user), low2highgid(group));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE2(setregid16, old_gid_t, rgid, old_gid_t, egid)
|
||||
{
|
||||
long ret = sys_setregid(low2highgid(rgid), low2highgid(egid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(2, ret, rgid, egid);
|
||||
return ret;
|
||||
return sys_setregid(low2highgid(rgid), low2highgid(egid));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE1(setgid16, old_gid_t, gid)
|
||||
{
|
||||
long ret = sys_setgid(low2highgid(gid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(1, ret, gid);
|
||||
return ret;
|
||||
return sys_setgid(low2highgid(gid));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE2(setreuid16, old_uid_t, ruid, old_uid_t, euid)
|
||||
{
|
||||
long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(2, ret, ruid, euid);
|
||||
return ret;
|
||||
return sys_setreuid(low2highuid(ruid), low2highuid(euid));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE1(setuid16, old_uid_t, uid)
|
||||
{
|
||||
long ret = sys_setuid(low2highuid(uid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(1, ret, uid);
|
||||
return ret;
|
||||
return sys_setuid(low2highuid(uid));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE3(setresuid16, old_uid_t, ruid, old_uid_t, euid, old_uid_t, suid)
|
||||
{
|
||||
long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid),
|
||||
return sys_setresuid(low2highuid(ruid), low2highuid(euid),
|
||||
low2highuid(suid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(3, ret, ruid, euid, suid);
|
||||
return ret;
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruidp, old_uid_t __user *, euidp, old_uid_t __user *, suidp)
|
||||
@@ -100,11 +76,8 @@ SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruidp, old_uid_t __user *, euid
|
||||
|
||||
SYSCALL_DEFINE3(setresgid16, old_gid_t, rgid, old_gid_t, egid, old_gid_t, sgid)
|
||||
{
|
||||
long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid),
|
||||
return sys_setresgid(low2highgid(rgid), low2highgid(egid),
|
||||
low2highgid(sgid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(3, ret, rgid, egid, sgid);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -127,18 +100,12 @@ SYSCALL_DEFINE3(getresgid16, old_gid_t __user *, rgidp, old_gid_t __user *, egid
|
||||
|
||||
SYSCALL_DEFINE1(setfsuid16, old_uid_t, uid)
|
||||
{
|
||||
long ret = sys_setfsuid(low2highuid(uid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(1, ret, uid);
|
||||
return ret;
|
||||
return sys_setfsuid(low2highuid(uid));
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE1(setfsgid16, old_gid_t, gid)
|
||||
{
|
||||
long ret = sys_setfsgid(low2highgid(gid));
|
||||
/* avoid REGPARM breakage on x86: */
|
||||
asmlinkage_protect(1, ret, gid);
|
||||
return ret;
|
||||
return sys_setfsgid(low2highgid(gid));
|
||||
}
|
||||
|
||||
static int groups16_to_user(old_gid_t __user *grouplist,
|
||||
|
||||
Reference in New Issue
Block a user