s390/compat: correct check for EFAULT in rt-signal frame creation
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 10 Dec 2013 15:18:07 +0000 (16:18 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 16 Dec 2013 13:37:47 +0000 (14:37 +0100)
The return code of the __put_user call to store the rt_sigreturn
system call to the user stack if not properly checked, the err
variable is only checked before to the __put_user. Use an if
statement instead.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/compat_signal.c

index 95e7ba0..8b84bc3 100644 (file)
@@ -412,8 +412,9 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
                regs->gprs[14] = (__u64 __force) ka->sa.sa_restorer | PSW32_ADDR_AMODE;
        } else {
                regs->gprs[14] = (__u64 __force) frame->retcode | PSW32_ADDR_AMODE;
-               err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn,
-                                 (u16 __force __user *)(frame->retcode));
+               if (__put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn,
+                              (u16 __force __user *)(frame->retcode)))
+                       goto give_sigsegv;
        }
 
        /* Set up backchain. */