mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 15:47:36 +00:00
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>
This commit is contained in:
parent
5c8c56ebdf
commit
e2b5530698
1 changed files with 1 additions and 2 deletions
|
@ -821,7 +821,7 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka,
|
||||||
goto badframe;
|
goto badframe;
|
||||||
regs->link = (unsigned long) frame->tramp;
|
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;
|
goto badframe;
|
||||||
regs->gpr[1] = newsp;
|
regs->gpr[1] = newsp;
|
||||||
regs->gpr[3] = sig;
|
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[5] = (unsigned long) &rt_sf->uc;
|
||||||
regs->gpr[6] = (unsigned long) rt_sf;
|
regs->gpr[6] = (unsigned long) rt_sf;
|
||||||
regs->nip = (unsigned long) ka->sa.sa_handler;
|
regs->nip = (unsigned long) ka->sa.sa_handler;
|
||||||
regs->link = (unsigned long) frame->tramp;
|
|
||||||
regs->trap = 0;
|
regs->trap = 0;
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
regs->result = 0;
|
regs->result = 0;
|
||||||
|
|
Loading…
Reference in a new issue