From 13cf75cb0e47f505ae174170a962f16fea3a151b Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 23 Dec 2012 03:06:03 -0500 Subject: [PATCH] --- yaml --- r: 356689 b: refs/heads/master c: 08d4f65352f9464f1dd7d65d0bc27d57abf3d161 h: refs/heads/master i: 356687: 4223daac72cee7fa2352ca24b3fb0ee8c54a1dc8 v: v3 --- [refs] | 2 +- trunk/arch/m32r/Kconfig | 1 - trunk/arch/m32r/kernel/signal.c | 16 ++++++++++++++-- trunk/arch/m68k/Kconfig | 1 + trunk/arch/m68k/kernel/signal.c | 16 +++------------- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index 082c83bcf74e..13fe31bb1c23 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1084f751d437a1823787285517f1161935483569 +refs/heads/master: 08d4f65352f9464f1dd7d65d0bc27d57abf3d161 diff --git a/trunk/arch/m32r/Kconfig b/trunk/arch/m32r/Kconfig index 1f550d4dd5d0..f807721e19a5 100644 --- a/trunk/arch/m32r/Kconfig +++ b/trunk/arch/m32r/Kconfig @@ -15,7 +15,6 @@ config M32R select GENERIC_ATOMIC64 select ARCH_USES_GETTIMEOFFSET select MODULES_USE_ELF_RELA - select GENERIC_SIGALTSTACK config SBUS bool diff --git a/trunk/arch/m32r/kernel/signal.c b/trunk/arch/m32r/kernel/signal.c index d503568cb753..6e3c26a1607c 100644 --- a/trunk/arch/m32r/kernel/signal.c +++ b/trunk/arch/m32r/kernel/signal.c @@ -27,6 +27,15 @@ #define DEBUG_SIG 0 +asmlinkage int +sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, + unsigned long r2, unsigned long r3, unsigned long r4, + unsigned long r5, unsigned long r6, struct pt_regs *regs) +{ + return do_sigaltstack(uss, uoss, regs->spu); +} + + /* * Do a signal return; undo the signal stack. */ @@ -104,7 +113,7 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1, if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result)) goto badframe; - if (restore_altstack(&frame->uc.uc_stack)) + if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->spu) == -EFAULT) goto badframe; return result; @@ -204,7 +213,10 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, /* Create the ucontext. */ err |= __put_user(0, &frame->uc.uc_flags); err |= __put_user(0, &frame->uc.uc_link); - err |= __save_altstack(&frame->uc.uc_stack, regs->spu); + err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); + err |= __put_user(sas_ss_flags(regs->spu), + &frame->uc.uc_stack.ss_flags); + err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]); err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); if (err) diff --git a/trunk/arch/m68k/Kconfig b/trunk/arch/m68k/Kconfig index 6710084e072a..3e73dca71677 100644 --- a/trunk/arch/m68k/Kconfig +++ b/trunk/arch/m68k/Kconfig @@ -18,6 +18,7 @@ config M68K select HAVE_MOD_ARCH_SPECIFIC select MODULES_USE_ELF_REL select MODULES_USE_ELF_RELA + select GENERIC_SIGALTSTACK config RWSEM_GENERIC_SPINLOCK bool diff --git a/trunk/arch/m68k/kernel/signal.c b/trunk/arch/m68k/kernel/signal.c index 9a396cda3147..41a34de4b4b4 100644 --- a/trunk/arch/m68k/kernel/signal.c +++ b/trunk/arch/m68k/kernel/signal.c @@ -267,13 +267,6 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, return ret; } -asmlinkage int -sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) -{ - return do_sigaltstack(uss, uoss, rdusp()); -} - - /* * Do a signal return; undo the signal stack. * @@ -765,8 +758,9 @@ rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw, err |= __get_user(temp, &uc->uc_formatvec); err |= rt_restore_fpu_state(uc); + err |= restore_altstack(&uc->uc_stack); - if (err || do_sigaltstack(&uc->uc_stack, NULL, usp) == -EFAULT) + if (err) goto badframe; if (mangle_kernel_stack(regs, temp, &uc->uc_extra)) @@ -1014,11 +1008,7 @@ static int setup_rt_frame (int sig, struct k_sigaction *ka, siginfo_t *info, /* Create the ucontext. */ err |= __put_user(0, &frame->uc.uc_flags); err |= __put_user(NULL, &frame->uc.uc_link); - err |= __put_user((void __user *)current->sas_ss_sp, - &frame->uc.uc_stack.ss_sp); - err |= __put_user(sas_ss_flags(rdusp()), - &frame->uc.uc_stack.ss_flags); - err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); + err |= __save_altstack(&frame->uc.uc_stack, rdusp()); err |= rt_setup_ucontext(&frame->uc, regs); err |= copy_to_user (&frame->uc.uc_sigmask, set, sizeof(*set));