parisc: switch to generic compat rt_sigaction()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 25 Dec 2012 23:53:43 +0000 (18:53 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Feb 2013 23:16:07 +0000 (18:16 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/parisc/Kconfig
arch/parisc/kernel/signal32.c
arch/parisc/kernel/signal32.h
arch/parisc/kernel/sys32.h
arch/parisc/kernel/syscall_table.S

index 798038c..2bd407f 100644 (file)
@@ -24,6 +24,7 @@ config PARISC
        select MODULES_USE_ELF_RELA
        select CLONE_BACKWARDS
        select GENERIC_SIGALTSTACK
+       select GENERIC_COMPAT_RT_SIGACTION
        select GENERIC_COMPAT_RT_SIGQUEUEINFO
        select GENERIC_COMPAT_RT_SIGPROCMASK
        select GENERIC_COMPAT_RT_SIGPENDING
index 7769f93..33eca1b 100644 (file)
@@ -61,34 +61,6 @@ sigset_64to32(compat_sigset_t *s32, sigset_t *s64)
 }
 
 long
-sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, struct sigaction32 __user *oact,
-                 size_t sigsetsize)
-{
-       struct k_sigaction32 new_sa32, old_sa32;
-       struct k_sigaction new_sa, old_sa;
-       int ret = -EINVAL;
-
-       if (act) {
-               if (copy_from_user(&new_sa32.sa, act, sizeof new_sa32.sa))
-                       return -EFAULT;
-               new_sa.sa.sa_handler = (__sighandler_t)(unsigned long)new_sa32.sa.sa_handler;
-               new_sa.sa.sa_flags = new_sa32.sa.sa_flags;
-               sigset_32to64(&new_sa.sa.sa_mask, &new_sa32.sa.sa_mask);
-       }
-
-       ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);
-
-       if (!ret && oact) {
-               sigset_64to32(&old_sa32.sa.sa_mask, &old_sa.sa.sa_mask);
-               old_sa32.sa.sa_flags = old_sa.sa.sa_flags;
-               old_sa32.sa.sa_handler = (__sighandler_t32)(unsigned long)old_sa.sa.sa_handler;
-               if (copy_to_user(oact, &old_sa32.sa, sizeof old_sa32.sa))
-                       return -EFAULT;
-       }
-       return ret;
-}
-
-long
 restore_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __user * rf,
                struct pt_regs *regs)
 {
index 640dc3e..72ab41a 100644 (file)
 
 #include <linux/compat.h>
 
-typedef compat_uptr_t compat_sighandler_t;
-
-/* Most things should be clean enough to redefine this at will, if care
-   is taken to make libc match.  */
-
-struct compat_sigaction {
-        compat_sighandler_t sa_handler;
-        compat_uint_t sa_flags;
-        compat_sigset_t sa_mask;               /* mask last for extensibility */
-};
-
 /* 32-bit ucontext as seen from an 64-bit kernel */
 struct compat_ucontext {
         compat_uint_t uc_flags;
@@ -45,10 +34,6 @@ struct compat_ucontext {
 
 /* ELF32 signal handling */
 
-struct k_sigaction32 {
-       struct compat_sigaction sa;
-};
-
 int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from);
 int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from);
 
index 06c2090..60dd470 100644 (file)
     set_fs (old_fs); \
 }
 
-#ifdef CONFIG_COMPAT
-
-typedef __u32 __sighandler_t32;
-
-struct sigaction32 {
-       __sighandler_t32 sa_handler;
-       unsigned int sa_flags;
-       compat_sigset_t sa_mask;                /* mask last for extensibility */
-};
-
-#endif
-
 #endif
index 883171e..dd52c23 100644 (file)
        ENTRY_SAME(prctl)
        /* signals need a careful review */
        ENTRY_SAME(rt_sigreturn_wrapper)
-       ENTRY_DIFF(rt_sigaction)
+       ENTRY_COMP(rt_sigaction)
        ENTRY_COMP(rt_sigprocmask)      /* 175 */
        ENTRY_COMP(rt_sigpending)
        ENTRY_COMP(rt_sigtimedwait)