diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/compat.c | 19 | ||||
| -rw-r--r-- | kernel/exit.c | 5 | ||||
| -rw-r--r-- | kernel/fork.c | 5 | ||||
| -rw-r--r-- | kernel/sys.c | 14 | ||||
| -rw-r--r-- | kernel/sys_ni.c | 3 | ||||
| -rw-r--r-- | kernel/uid16.c | 55 | 
6 files changed, 28 insertions, 73 deletions
diff --git a/kernel/compat.c b/kernel/compat.c index 1e8f1455117..0a09e481b70 100644 --- a/kernel/compat.c +++ b/kernel/compat.c @@ -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, diff --git a/kernel/exit.c b/kernel/exit.c index 60bc027c61c..6e3151ec900 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -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;  } diff --git a/kernel/fork.c b/kernel/fork.c index 339f60dfd62..7d40687b143 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -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 diff --git a/kernel/sys.c b/kernel/sys.c index afd0f7e125c..b95d3c72ba2 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -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); diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c index 395084d4ce1..bfd6787b355 100644 --- a/kernel/sys_ni.c +++ b/kernel/sys_ni.c @@ -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); diff --git a/kernel/uid16.c b/kernel/uid16.c index d7948eb1022..f6c83d7ef00 100644 --- a/kernel/uid16.c +++ b/kernel/uid16.c @@ -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,  |