]> Pileus Git - ~andy/linux/commitdiff
parisc: fix error return codes for rt_sigaction and rt_sigprocmask
authorHelge Deller <deller@gmx.de>
Tue, 19 Feb 2013 20:11:39 +0000 (21:11 +0100)
committerHelge Deller <deller@gmx.de>
Wed, 20 Feb 2013 21:57:02 +0000 (22:57 +0100)
Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/kernel/signal32.c

index 5dede04f2f3ead372752fdbaaafceca5708b6902..2ddcabb616cecaca1c1e19088e30e5213dc0706f 100644 (file)
@@ -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;