diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-12-10 10:18:07 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-12-16 08:37:47 -0500 |
commit | 41932bc1c86e527f866acfcd26506da3bd20509b (patch) | |
tree | f7dde5097459e6f13db18cd1219ac1cc8b4df246 /arch/s390 | |
parent | 96619fc1b3d06703113ab4c5cd8c15f35a42dc99 (diff) |
s390/compat: correct check for EFAULT in rt-signal frame creation
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>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kernel/compat_signal.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index 95e7ba0fbb7e..8b84bc373e94 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
@@ -412,8 +412,9 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
412 | regs->gprs[14] = (__u64 __force) ka->sa.sa_restorer | PSW32_ADDR_AMODE; | 412 | regs->gprs[14] = (__u64 __force) ka->sa.sa_restorer | PSW32_ADDR_AMODE; |
413 | } else { | 413 | } else { |
414 | regs->gprs[14] = (__u64 __force) frame->retcode | PSW32_ADDR_AMODE; | 414 | regs->gprs[14] = (__u64 __force) frame->retcode | PSW32_ADDR_AMODE; |
415 | err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, | 415 | if (__put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, |
416 | (u16 __force __user *)(frame->retcode)); | 416 | (u16 __force __user *)(frame->retcode))) |
417 | goto give_sigsegv; | ||
417 | } | 418 | } |
418 | 419 | ||
419 | /* Set up backchain. */ | 420 | /* Set up backchain. */ |