aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/signal.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-02-09 11:19:21 -0500
committerTakashi Iwai <tiwai@suse.de>2009-02-09 11:19:21 -0500
commit2a074f4a54d11ec0ce16b35e9a88feaa2fd886aa (patch)
treeb81ab05dac66fa0cccf44896d2d86be7ba52aa49 /arch/x86/kernel/signal.c
parent23c7b521c250b261dd97a7a06d5a2e74b56233d5 (diff)
parent8bd4bb7a35e8ebb015a531218614c48e10a3c4ee (diff)
Merge branch 'topic/quirk-cleanup' into topic/hda
Diffstat (limited to 'arch/x86/kernel/signal.c')
-rw-r--r--arch/x86/kernel/signal.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index 89bb7668041d..df0587f24c54 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -632,9 +632,16 @@ badframe:
632} 632}
633 633
634#ifdef CONFIG_X86_32 634#ifdef CONFIG_X86_32
635asmlinkage int sys_rt_sigreturn(struct pt_regs regs) 635/*
636 * Note: do not pass in pt_regs directly as with tail-call optimization
637 * GCC will incorrectly stomp on the caller's frame and corrupt user-space
638 * register state:
639 */
640asmlinkage int sys_rt_sigreturn(unsigned long __unused)
636{ 641{
637 return do_rt_sigreturn(&regs); 642 struct pt_regs *regs = (struct pt_regs *)&__unused;
643
644 return do_rt_sigreturn(regs);
638} 645}
639#else /* !CONFIG_X86_32 */ 646#else /* !CONFIG_X86_32 */
640asmlinkage long sys_rt_sigreturn(struct pt_regs *regs) 647asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)