diff options
author | Helge Deller <deller@gmx.de> | 2013-02-19 15:11:39 -0500 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2013-02-20 16:57:02 -0500 |
commit | 2e800dff4f16a6e47adcbea7188fc586bfa5c30b (patch) | |
tree | 195fd95575b615ac0f06e35b75110fe5e360730b /arch/parisc | |
parent | bf581e15a443fa3569d9def96b512315ba509d6f (diff) |
parisc: fix error return codes for rt_sigaction and rt_sigprocmask
Signed-off-by: Helge Deller <deller@gmx.de>
Diffstat (limited to 'arch/parisc')
-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 5dede04f2f3e..2ddcabb616ce 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) | |||
65 | { | 65 | { |
66 | compat_sigset_t s; | 66 | compat_sigset_t s; |
67 | 67 | ||
68 | if (sz != sizeof *set) | 68 | if (sz != sizeof(compat_sigset_t)) |
69 | return -EINVAL; | 69 | return -EINVAL; |
70 | sigset_64to32(&s, set); | 70 | sigset_64to32(&s, set); |
71 | 71 | ||
@@ -78,7 +78,7 @@ get_sigset32(compat_sigset_t __user *up, sigset_t *set, size_t sz) | |||
78 | compat_sigset_t s; | 78 | compat_sigset_t s; |
79 | int r; | 79 | int r; |
80 | 80 | ||
81 | if (sz != sizeof *set) | 81 | if (sz != sizeof(compat_sigset_t)) |
82 | return -EINVAL; | 82 | return -EINVAL; |
83 | 83 | ||
84 | if ((r = copy_from_user(&s, up, sz)) == 0) { | 84 | 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 _ | |||
94 | sigset_t old_set, new_set; | 94 | sigset_t old_set, new_set; |
95 | int ret; | 95 | int ret; |
96 | 96 | ||
97 | if (set && get_sigset32(set, &new_set, sigsetsize)) | 97 | if (set) { |
98 | return -EFAULT; | 98 | ret = get_sigset32(set, &new_set, sigsetsize); |
99 | if (ret) | ||
100 | return ret; | ||
101 | } | ||
99 | 102 | ||
100 | KERNEL_SYSCALL(ret, sys_rt_sigprocmask, how, set ? (sigset_t __user *)&new_set : NULL, | 103 | KERNEL_SYSCALL(ret, sys_rt_sigprocmask, how, set ? (sigset_t __user *)&new_set : NULL, |
101 | oset ? (sigset_t __user *)&old_set : NULL, sigsetsize); | 104 | oset ? (sigset_t __user *)&old_set : NULL, sigsetsize); |
@@ -128,6 +131,10 @@ sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, struct sigacti | |||
128 | struct k_sigaction new_sa, old_sa; | 131 | struct k_sigaction new_sa, old_sa; |
129 | int ret = -EINVAL; | 132 | int ret = -EINVAL; |
130 | 133 | ||
134 | /* XXX: Don't preclude handling different sized sigset_t's. */ | ||
135 | if (sigsetsize != sizeof(compat_sigset_t)) | ||
136 | return -EINVAL; | ||
137 | |||
131 | if (act) { | 138 | if (act) { |
132 | if (copy_from_user(&new_sa32.sa, act, sizeof new_sa32.sa)) | 139 | if (copy_from_user(&new_sa32.sa, act, sizeof new_sa32.sa)) |
133 | return -EFAULT; | 140 | return -EFAULT; |