parisc: switch to {get,put}_compat_sigset()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 4 Sep 2017 16:14:28 +0000 (12:14 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 19 Sep 2017 21:56:02 +0000 (17:56 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/parisc/kernel/signal.c
arch/parisc/kernel/signal32.c
arch/parisc/kernel/signal32.h

index 26f12f4..fdd82e8 100644 (file)
@@ -92,7 +92,6 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
        unsigned long usp = (regs->gr[30] & ~(0x01UL));
        unsigned long sigframe_size = PARISC_RT_SIGFRAME_SIZE;
 #ifdef CONFIG_64BIT
-       compat_sigset_t compat_set;
        struct compat_rt_sigframe __user * compat_frame;
        
        if (is_compat_task())
@@ -113,9 +112,8 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
        
        if (is_compat_task()) {
                DBG(2,"sys_rt_sigreturn: ELF32 process.\n");
-               if (__copy_from_user(&compat_set, &compat_frame->uc.uc_sigmask, sizeof(compat_set)))
+               if (get_compat_sigset(&set, &compat_frame->uc.uc_sigmask))
                        goto give_sigsegv;
-               sigset_32to64(&set,&compat_set);
        } else
 #endif
        {
@@ -237,7 +235,6 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,
        int err = 0;
 #ifdef CONFIG_64BIT
        struct compat_rt_sigframe __user * compat_frame;
-       compat_sigset_t compat_set;
 #endif
        
        usp = (regs->gr[30] & ~(0x01UL));
@@ -260,8 +257,8 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs,
                DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &compat_frame->uc.uc_mcontext);
                err |= setup_sigcontext32(&compat_frame->uc.uc_mcontext, 
                                        &compat_frame->regs, regs, in_syscall);
-               sigset_64to32(&compat_set,set);
-               err |= __copy_to_user(&compat_frame->uc.uc_sigmask, &compat_set, sizeof(compat_set));
+               err |= put_compat_sigset(&compat_frame->uc.uc_sigmask, set,
+                                        sizeof(compat_sigset_t));
        } else
 #endif
        {       
index 9e0cb6a..41afa9c 100644 (file)
 #define DBG(LEVEL, ...)
 #endif
 
-inline void
-sigset_32to64(sigset_t *s64, compat_sigset_t *s32)
-{
-       s64->sig[0] = s32->sig[0] | ((unsigned long)s32->sig[1] << 32);
-}
-
-inline void
-sigset_64to32(compat_sigset_t *s32, sigset_t *s64)
-{
-       s32->sig[0] = s64->sig[0] & 0xffffffffUL;
-       s32->sig[1] = (s64->sig[0] >> 32) & 0xffffffffUL;
-}
-
 long
 restore_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __user * rf,
                struct pt_regs *regs)
index af51d4c..719e741 100644 (file)
@@ -79,8 +79,6 @@ struct compat_rt_sigframe {
 #define FUNCTIONCALLFRAME32     48
 #define PARISC_RT_SIGFRAME_SIZE32 (((sizeof(struct compat_rt_sigframe) + FUNCTIONCALLFRAME32) + SIGFRAME32) & -SIGFRAME32)
 
-void sigset_32to64(sigset_t *s64, compat_sigset_t *s32);
-void sigset_64to32(compat_sigset_t *s32, sigset_t *s64);
 long restore_sigcontext32(struct compat_sigcontext __user *sc, 
                struct compat_regfile __user *rf,
                struct pt_regs *regs);