]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/mips/kernel/signal32.c
Merge branch 'sfc-3.9' into master
[karo-tx-linux.git] / arch / mips / kernel / signal32.c
index 0b1f57111eae9b9301f9b166388ca890fd23a6a2..57de8b751627be4eb57b21f124525a8521e1f5ea 100644 (file)
@@ -48,25 +48,19 @@ extern asmlinkage int fpu_emulator_restore_context32(struct sigcontext32 __user
 /*
  * Including <asm/unistd.h> would give use the 64-bit syscall numbers ...
  */
-#define __NR_O32_restart_syscall        4253
+#define __NR_O32_restart_syscall       4253
 
 /* 32-bit compatibility types */
 
 typedef unsigned int __sighandler32_t;
 typedef void (*vfptr_t)(void);
 
-struct sigaction32 {
-       unsigned int            sa_flags;
-       __sighandler32_t        sa_handler;
-       compat_sigset_t         sa_mask;
-};
-
 struct ucontext32 {
-       u32                 uc_flags;
-       s32                 uc_link;
+       u32                 uc_flags;
+       s32                 uc_link;
        compat_stack_t      uc_stack;
        struct sigcontext32 uc_mcontext;
-       compat_sigset_t     uc_sigmask;   /* mask last for extensibility */
+       compat_sigset_t     uc_sigmask;   /* mask last for extensibility */
 };
 
 struct sigframe32 {
@@ -278,8 +272,8 @@ asmlinkage int sys32_sigsuspend(compat_sigset_t __user *uset)
        return compat_sys_rt_sigsuspend(uset, sizeof(compat_sigset_t));
 }
 
-SYSCALL_DEFINE3(32_sigaction, long, sig, const struct sigaction32 __user *, act,
-       struct sigaction32 __user *, oact)
+SYSCALL_DEFINE3(32_sigaction, long, sig, const struct compat_sigaction __user *, act,
+       struct compat_sigaction __user *, oact)
 {
        struct k_sigaction new_ka, old_ka;
        int ret;
@@ -308,7 +302,7 @@ SYSCALL_DEFINE3(32_sigaction, long, sig, const struct sigaction32 __user *, act,
                        return -EFAULT;
                err |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
                err |= __put_user((u32)(u64)old_ka.sa.sa_handler,
-                                 &oact->sa_handler);
+                                 &oact->sa_handler);
                err |= __put_user(old_ka.sa.sa_mask.sig[0], oact->sa_mask.sig);
                err |= __put_user(0, &oact->sa_mask.sig[1]);
                err |= __put_user(0, &oact->sa_mask.sig[2]);
@@ -513,7 +507,7 @@ static int setup_rt_frame_32(void *sig_return, struct k_sigaction *ka,
        /* Convert (siginfo_t -> compat_siginfo_t) and copy to user. */
        err |= copy_siginfo_to_user32(&frame->rs_info, info);
 
-       /* Create the ucontext.  */
+       /* Create the ucontext.  */
        err |= __put_user(0, &frame->rs_uc.uc_flags);
        err |= __put_user(0, &frame->rs_uc.uc_link);
        err |= __compat_save_altstack(&frame->rs_uc.uc_stack, regs->regs[29]);
@@ -558,56 +552,12 @@ struct mips_abi mips_abi_32 = {
        .setup_frame    = setup_frame_32,
        .signal_return_offset =
                offsetof(struct mips_vdso, o32_signal_trampoline),
-       .setup_rt_frame = setup_rt_frame_32,
+       .setup_rt_frame = setup_rt_frame_32,
        .rt_signal_return_offset =
                offsetof(struct mips_vdso, o32_rt_signal_trampoline),
        .restart        = __NR_O32_restart_syscall
 };
 
-SYSCALL_DEFINE4(32_rt_sigaction, int, sig,
-       const struct sigaction32 __user *, act,
-       struct sigaction32 __user *, oact, unsigned int, sigsetsize)
-{
-       struct k_sigaction new_sa, old_sa;
-       int ret = -EINVAL;
-
-       /* XXX: Don't preclude handling different sized sigset_t's.  */
-       if (sigsetsize != sizeof(sigset_t))
-               goto out;
-
-       if (act) {
-               s32 handler;
-               int err = 0;
-
-               if (!access_ok(VERIFY_READ, act, sizeof(*act)))
-                       return -EFAULT;
-               err |= __get_user(handler, &act->sa_handler);
-               new_sa.sa.sa_handler = (void __user *)(s64)handler;
-               err |= __get_user(new_sa.sa.sa_flags, &act->sa_flags);
-               err |= get_sigset(&new_sa.sa.sa_mask, &act->sa_mask);
-               if (err)
-                       return -EFAULT;
-       }
-
-       ret = do_sigaction(sig, act ? &new_sa : NULL, oact ? &old_sa : NULL);
-
-       if (!ret && oact) {
-               int err = 0;
-
-               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)))
-                       return -EFAULT;
-
-               err |= __put_user((u32)(u64)old_sa.sa.sa_handler,
-                                  &oact->sa_handler);
-               err |= __put_user(old_sa.sa.sa_flags, &oact->sa_flags);
-               err |= put_sigset(&old_sa.sa.sa_mask, &oact->sa_mask);
-               if (err)
-                       return -EFAULT;
-       }
-out:
-       return ret;
-}
-
 static int signal32_init(void)
 {
        if (cpu_has_fpu) {