OSDN Git Service

powerpc/signal32: Simplify logging in handle_rt_signal32()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 18 Aug 2020 17:19:24 +0000 (17:19 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 Dec 2020 14:01:12 +0000 (01:01 +1100)
If something is bad in the frame, there is no point in
knowing which part of the frame exactly is wrong as it
got allocated as a single block.

Always print the root address of the frame in case of
failed user access, just like handle_signal32().

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/691895bd31fee89a2d8370befd66ad4eff5b63f2.1597770847.git.christophe.leroy@csgroup.eu
arch/powerpc/kernel/signal_32.c

index deb729c..44a4691 100644 (file)
@@ -754,7 +754,6 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
        struct rt_sigframe __user *rt_sf;
        struct mcontext __user *frame;
        struct mcontext __user *tm_frame = NULL;
-       void __user *addr;
        unsigned long newsp = 0;
        int sigret;
        unsigned long tramp;
@@ -767,7 +766,6 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
        /* Set up Signal Frame */
        /* Put a Real Time Context onto stack */
        rt_sf = get_sigframe(ksig, tsk, sizeof(*rt_sf), 1);
-       addr = rt_sf;
        if (!access_ok(rt_sf, sizeof(*rt_sf)))
                goto badframe;
 
@@ -782,7 +780,6 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
 
        /* Save user registers on the stack */
        frame = &rt_sf->uc.uc_mcontext;
-       addr = frame;
        if (vdso32_rt_sigtramp && tsk->mm->context.vdso_base) {
                sigret = 0;
                tramp = tsk->mm->context.vdso_base + vdso32_rt_sigtramp;
@@ -818,7 +815,6 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
 
        /* create a stack frame for the caller of the handler */
        newsp = ((unsigned long)rt_sf) - (__SIGNAL_FRAMESIZE + 16);
-       addr = (void __user *)regs->gpr[1];
        if (put_user(regs->gpr[1], (u32 __user *)newsp))
                goto badframe;
 
@@ -835,7 +831,7 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
        return 0;
 
 badframe:
-       signal_fault(tsk, regs, "handle_rt_signal32", addr);
+       signal_fault(tsk, regs, "handle_rt_signal32", rt_sf);
 
        return 1;
 }