diff options
Diffstat (limited to 'arch/parisc/kernel/signal32.c')
| -rw-r--r-- | arch/parisc/kernel/signal32.c | 15 | 
1 files changed, 11 insertions, 4 deletions
diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c index 5dede04f2f3..2ddcabb616c 100644 --- a/arch/parisc/kernel/signal32.c +++ b/arch/parisc/kernel/signal32.c @@ -65,7 +65,7 @@ put_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz)  {  	compat_sigset_t s; -	if (sz != sizeof *set) +	if (sz != sizeof(compat_sigset_t))  		return -EINVAL;  	sigset_64to32(&s, set); @@ -78,7 +78,7 @@ get_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz)  	compat_sigset_t s;  	int r; -	if (sz != sizeof *set) +	if (sz != sizeof(compat_sigset_t))  		return -EINVAL;  	if ((r = copy_from_user(&s, up, sz)) == 0) { @@ -94,8 +94,11 @@ int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, compat_sigset_t _  	sigset_t old_set, new_set;  	int ret; -	if (set && get_sigset32(set, &new_set, sigsetsize)) -		return -EFAULT; +	if (set) { +		ret = get_sigset32(set, &new_set, sigsetsize); +		if (ret) +			return ret; +	}  	KERNEL_SYSCALL(ret, sys_rt_sigprocmask, how, set ? (sigset_t __user *)&new_set : NULL,  				 oset ? (sigset_t __user *)&old_set : NULL, sigsetsize); @@ -128,6 +131,10 @@ sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, struct sigacti  	struct k_sigaction new_sa, old_sa;  	int ret = -EINVAL; +	/* XXX: Don't preclude handling different sized sigset_t's.  */ +	if (sigsetsize != sizeof(compat_sigset_t)) +		return -EINVAL; +  	if (act) {  		if (copy_from_user(&new_sa32.sa, act, sizeof new_sa32.sa))  			return -EFAULT;  |