diff options
Diffstat (limited to 'kernel/sys.c')
| -rw-r--r-- | kernel/sys.c | 25 | 
1 files changed, 13 insertions, 12 deletions
| diff --git a/kernel/sys.c b/kernel/sys.c index 462d78d55895..f64e97cabe25 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -25,6 +25,7 @@  #include <linux/dcookies.h>  #include <linux/suspend.h>  #include <linux/tty.h> +#include <linux/signal.h>  #include <linux/compat.h>  #include <linux/syscalls.h> @@ -227,7 +228,7 @@ static int set_one_prio(struct task_struct *p, int niceval, int error)  		error = -EPERM;  		goto out;  	} -	if (niceval < task_nice(p) && !capable(CAP_SYS_NICE)) { +	if (niceval < task_nice(p) && !can_nice(p, niceval)) {  		error = -EACCES;  		goto out;  	} @@ -525,7 +526,7 @@ asmlinkage long sys_setregid(gid_t rgid, gid_t egid)  	if (new_egid != old_egid)  	{  		current->mm->dumpable = 0; -		wmb(); +		smp_wmb();  	}  	if (rgid != (gid_t) -1 ||  	    (egid != (gid_t) -1 && egid != old_rgid)) @@ -556,7 +557,7 @@ asmlinkage long sys_setgid(gid_t gid)  		if(old_egid != gid)  		{  			current->mm->dumpable=0; -			wmb(); +			smp_wmb();  		}  		current->gid = current->egid = current->sgid = current->fsgid = gid;  	} @@ -565,7 +566,7 @@ asmlinkage long sys_setgid(gid_t gid)  		if(old_egid != gid)  		{  			current->mm->dumpable=0; -			wmb(); +			smp_wmb();  		}  		current->egid = current->fsgid = gid;  	} @@ -596,7 +597,7 @@ static int set_user(uid_t new_ruid, int dumpclear)  	if(dumpclear)  	{  		current->mm->dumpable = 0; -		wmb(); +		smp_wmb();  	}  	current->uid = new_ruid;  	return 0; @@ -653,7 +654,7 @@ asmlinkage long sys_setreuid(uid_t ruid, uid_t euid)  	if (new_euid != old_euid)  	{  		current->mm->dumpable=0; -		wmb(); +		smp_wmb();  	}  	current->fsuid = current->euid = new_euid;  	if (ruid != (uid_t) -1 || @@ -703,7 +704,7 @@ asmlinkage long sys_setuid(uid_t uid)  	if (old_euid != uid)  	{  		current->mm->dumpable = 0; -		wmb(); +		smp_wmb();  	}  	current->fsuid = current->euid = uid;  	current->suid = new_suid; @@ -748,7 +749,7 @@ asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid)  		if (euid != current->euid)  		{  			current->mm->dumpable = 0; -			wmb(); +			smp_wmb();  		}  		current->euid = euid;  	} @@ -798,7 +799,7 @@ asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid)  		if (egid != current->egid)  		{  			current->mm->dumpable = 0; -			wmb(); +			smp_wmb();  		}  		current->egid = egid;  	} @@ -845,7 +846,7 @@ asmlinkage long sys_setfsuid(uid_t uid)  		if (uid != old_fsuid)  		{  			current->mm->dumpable = 0; -			wmb(); +			smp_wmb();  		}  		current->fsuid = uid;  	} @@ -875,7 +876,7 @@ asmlinkage long sys_setfsgid(gid_t gid)  		if (gid != old_fsgid)  		{  			current->mm->dumpable = 0; -			wmb(); +			smp_wmb();  		}  		current->fsgid = gid;  		key_fsgid_changed(current); @@ -1637,7 +1638,7 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,  	switch (option) {  		case PR_SET_PDEATHSIG:  			sig = arg2; -			if (sig < 0 || sig > _NSIG) { +			if (!valid_signal(sig)) {  				error = -EINVAL;  				break;  			} | 
