aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/signal.c')
-rw-r--r--arch/x86/kernel/signal.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index d7a158367e38..ccfb27412f0f 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -549,23 +549,27 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
549#endif /* CONFIG_X86_32 */ 549#endif /* CONFIG_X86_32 */
550 550
551#ifdef CONFIG_X86_32 551#ifdef CONFIG_X86_32
552ptregscall int 552int sys_sigaltstack(struct pt_regs *regs)
553sys_sigaltstack(struct pt_regs *regs, const stack_t __user *uss, 553{
554 stack_t __user *uoss) 554 const stack_t __user *uss = (const stack_t __user *)regs->bx;
555 stack_t __user *uoss = (stack_t __user *)regs->cx;
556
557 return do_sigaltstack(uss, uoss, regs->sp);
558}
555#else /* !CONFIG_X86_32 */ 559#else /* !CONFIG_X86_32 */
556asmlinkage long 560asmlinkage long
557sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, 561sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
558 struct pt_regs *regs) 562 struct pt_regs *regs)
559#endif /* CONFIG_X86_32 */
560{ 563{
561 return do_sigaltstack(uss, uoss, regs->sp); 564 return do_sigaltstack(uss, uoss, regs->sp);
562} 565}
566#endif /* CONFIG_X86_32 */
563 567
564/* 568/*
565 * Do a signal return; undo the signal stack. 569 * Do a signal return; undo the signal stack.
566 */ 570 */
567#ifdef CONFIG_X86_32 571#ifdef CONFIG_X86_32
568ptregscall unsigned long sys_sigreturn(struct pt_regs *regs) 572unsigned long sys_sigreturn(struct pt_regs *regs)
569{ 573{
570 struct sigframe __user *frame; 574 struct sigframe __user *frame;
571 unsigned long ax; 575 unsigned long ax;
@@ -629,13 +633,16 @@ badframe:
629} 633}
630 634
631#ifdef CONFIG_X86_32 635#ifdef CONFIG_X86_32
632ptregscall int sys_rt_sigreturn(struct pt_regs *regs) 636int sys_rt_sigreturn(struct pt_regs *regs)
637{
638 return do_rt_sigreturn(regs);
639}
633#else /* !CONFIG_X86_32 */ 640#else /* !CONFIG_X86_32 */
634asmlinkage long sys_rt_sigreturn(struct pt_regs *regs) 641asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
635#endif /* CONFIG_X86_32 */
636{ 642{
637 return do_rt_sigreturn(regs); 643 return do_rt_sigreturn(regs);
638} 644}
645#endif /* CONFIG_X86_32 */
639 646
640/* 647/*
641 * OK, we're invoking a handler: 648 * OK, we're invoking a handler: