diff options
author | Paul Mackerras <paulus@samba.org> | 2005-10-22 14:46:33 +1000 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-22 14:46:33 +1000 |
commit | e2b5530698cbe8148577b24097eaefcd835ac9ca (patch) | |
tree | 270f7505fa2b94880b5f59b638a8b5567c28f547 /arch/powerpc/kernel/signal_32.c | |
parent | 5c8c56ebdfb290e4feaac406518903f58714d874 (diff) | |
download | op-kernel-dev-e2b5530698cbe8148577b24097eaefcd835ac9ca.zip op-kernel-dev-e2b5530698cbe8148577b24097eaefcd835ac9ca.tar.gz |
ppc64: Fix delivery of RT signals to 32-bit processes.
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>
Diffstat (limited to 'arch/powerpc/kernel/signal_32.c')
-rw-r--r-- | arch/powerpc/kernel/signal_32.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 1c4eac4..92452b2 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c @@ -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; |