diff options
author | Christophe Leroy <christophe.leroy@csgroup.eu> | 2021-03-19 11:07:00 +0000 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2021-04-03 21:22:20 +1100 |
commit | c7393a71eb1abdda7e3a3ef798bae60de11540ec (patch) | |
tree | 2bd7a3cc0628e0a09b34ef87d8e9b71078831cb1 /arch/powerpc/kernel | |
parent | 887f3ceb51cd34109ac17bfc98695162e299e657 (diff) |
powerpc/signal32: Simplify logging in sigreturn()
Same spirit as commit debf122c777f ("powerpc/signal32: Simplify logging
in handle_rt_signal32()"), remove this intermediate 'addr' local var.
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/638fa99530beb29f82f94370057d110e91272acc.1616151715.git.christophe.leroy@csgroup.eu
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/signal_32.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 592b889e3836..5be267b3a13e 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c @@ -1352,7 +1352,6 @@ SYSCALL_DEFINE0(sigreturn) struct sigcontext __user *sc; struct sigcontext sigctx; struct mcontext __user *sr; - void __user *addr; sigset_t set; struct mcontext __user *mcp; struct mcontext __user *tm_mcp = NULL; @@ -1363,7 +1362,6 @@ SYSCALL_DEFINE0(sigreturn) sf = (struct sigframe __user *)(regs->gpr[1] + __SIGNAL_FRAMESIZE); sc = &sf->sctx; - addr = sc; if (copy_from_user(&sigctx, sc, sizeof(sigctx))) goto badframe; @@ -1392,16 +1390,19 @@ SYSCALL_DEFINE0(sigreturn) goto badframe; } else { sr = (struct mcontext __user *)from_user_ptr(sigctx.regs); - addr = sr; - if (restore_user_regs(regs, sr, 1)) - goto badframe; + if (restore_user_regs(regs, sr, 1)) { + signal_fault(current, regs, "sys_sigreturn", sr); + + force_sig(SIGSEGV); + return 0; + } } set_thread_flag(TIF_RESTOREALL); return 0; badframe: - signal_fault(current, regs, "sys_sigreturn", addr); + signal_fault(current, regs, "sys_sigreturn", sc); force_sig(SIGSEGV); return 0; |