diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-12-25 19:18:40 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-03 22:43:35 -0500 |
commit | a274bd498ce4b57294034d428b801b2bca3af774 (patch) | |
tree | 18ec27dca96e7a38f0bc0db67012d8954ae487fc /arch/sparc/kernel/sys_sparc32.c | |
parent | bdc40abf070eab82d27de99ef5ff62a1c5de238d (diff) |
sparc: switch to use of generic old sigaction
note that due to historical accident we do *not* directly take
generic versions - need to check and invert the sign of signal
number first.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/sparc/kernel/sys_sparc32.c')
-rw-r--r-- | arch/sparc/kernel/sys_sparc32.c | 37 |
1 files changed, 4 insertions, 33 deletions
diff --git a/arch/sparc/kernel/sys_sparc32.c b/arch/sparc/kernel/sys_sparc32.c index 4e96771a1b59..dcce0a6216cf 100644 --- a/arch/sparc/kernel/sys_sparc32.c +++ b/arch/sparc/kernel/sys_sparc32.c | |||
@@ -211,41 +211,12 @@ asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) | |||
211 | return sys_sysfs(option, arg1, arg2); | 211 | return sys_sysfs(option, arg1, arg2); |
212 | } | 212 | } |
213 | 213 | ||
214 | asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act, | 214 | COMPAT_SYSCALL_DEFINE3(sparc_sigaction, int, sig, |
215 | struct old_sigaction32 __user *oact) | 215 | struct compat_old_sigaction __user *,act, |
216 | struct compat_old_sigaction __user *,oact) | ||
216 | { | 217 | { |
217 | struct k_sigaction new_ka, old_ka; | ||
218 | int ret; | ||
219 | |||
220 | WARN_ON_ONCE(sig >= 0); | 218 | WARN_ON_ONCE(sig >= 0); |
221 | sig = -sig; | 219 | return compat_sys_sigaction(-sig, act, oact); |
222 | |||
223 | if (act) { | ||
224 | compat_old_sigset_t mask; | ||
225 | u32 u_handler, u_restorer; | ||
226 | |||
227 | ret = get_user(u_handler, &act->sa_handler); | ||
228 | new_ka.sa.sa_handler = compat_ptr(u_handler); | ||
229 | ret |= __get_user(u_restorer, &act->sa_restorer); | ||
230 | new_ka.sa.sa_restorer = compat_ptr(u_restorer); | ||
231 | ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); | ||
232 | ret |= __get_user(mask, &act->sa_mask); | ||
233 | if (ret) | ||
234 | return ret; | ||
235 | new_ka.ka_restorer = NULL; | ||
236 | siginitset(&new_ka.sa.sa_mask, mask); | ||
237 | } | ||
238 | |||
239 | ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); | ||
240 | |||
241 | if (!ret && oact) { | ||
242 | ret = put_user(ptr_to_compat(old_ka.sa.sa_handler), &oact->sa_handler); | ||
243 | ret |= __put_user(ptr_to_compat(old_ka.sa.sa_restorer), &oact->sa_restorer); | ||
244 | ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags); | ||
245 | ret |= __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); | ||
246 | } | ||
247 | |||
248 | return ret; | ||
249 | } | 220 | } |
250 | 221 | ||
251 | COMPAT_SYSCALL_DEFINE5(rt_sigaction, int, sig, | 222 | COMPAT_SYSCALL_DEFINE5(rt_sigaction, int, sig, |