ppc64: Fix delivery of RT signals to 32-bit processes.
Paul Mackerras [Sat, 22 Oct 2005 04:46:33 +0000 (14:46 +1000)]
An error in merging led to 32-bit processes getting the wrong link
register value on entry to RT signal handlers, and the wrong stack
chain as well.  This fixes it.

Signed-off-by: Paul Mackerras <paulus@samba.org>

arch/powerpc/kernel/signal_32.c

index 1c4eac4..92452b2 100644 (file)
@@ -821,7 +821,7 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka,
                        goto badframe;
                regs->link = (unsigned long) frame->tramp;
        }
-       if (put_user(regs->gpr[1], (unsigned long __user *)newsp))
+       if (put_user(regs->gpr[1], (u32 __user *)newsp))
                goto badframe;
        regs->gpr[1] = newsp;
        regs->gpr[3] = sig;
@@ -829,7 +829,6 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka,
        regs->gpr[5] = (unsigned long) &rt_sf->uc;
        regs->gpr[6] = (unsigned long) rt_sf;
        regs->nip = (unsigned long) ka->sa.sa_handler;
-       regs->link = (unsigned long) frame->tramp;
        regs->trap = 0;
 #ifdef CONFIG_PPC64
        regs->result = 0;