diff options
author | Paul Mackerras <paulus@samba.org> | 2005-10-22 00:46:33 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-10-22 00:46:33 -0400 |
commit | e2b5530698cbe8148577b24097eaefcd835ac9ca (patch) | |
tree | 270f7505fa2b94880b5f59b638a8b5567c28f547 /arch/powerpc/kernel/signal_32.c | |
parent | 5c8c56ebdfb290e4feaac406518903f58714d874 (diff) |
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 1c4eac4c808f..92452b2db26a 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, | |||
821 | goto badframe; | 821 | goto badframe; |
822 | regs->link = (unsigned long) frame->tramp; | 822 | regs->link = (unsigned long) frame->tramp; |
823 | } | 823 | } |
824 | if (put_user(regs->gpr[1], (unsigned long __user *)newsp)) | 824 | if (put_user(regs->gpr[1], (u32 __user *)newsp)) |
825 | goto badframe; | 825 | goto badframe; |
826 | regs->gpr[1] = newsp; | 826 | regs->gpr[1] = newsp; |
827 | regs->gpr[3] = sig; | 827 | regs->gpr[3] = sig; |
@@ -829,7 +829,6 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka, | |||
829 | regs->gpr[5] = (unsigned long) &rt_sf->uc; | 829 | regs->gpr[5] = (unsigned long) &rt_sf->uc; |
830 | regs->gpr[6] = (unsigned long) rt_sf; | 830 | regs->gpr[6] = (unsigned long) rt_sf; |
831 | regs->nip = (unsigned long) ka->sa.sa_handler; | 831 | regs->nip = (unsigned long) ka->sa.sa_handler; |
832 | regs->link = (unsigned long) frame->tramp; | ||
833 | regs->trap = 0; | 832 | regs->trap = 0; |
834 | #ifdef CONFIG_PPC64 | 833 | #ifdef CONFIG_PPC64 |
835 | regs->result = 0; | 834 | regs->result = 0; |