diff options
| -rw-r--r-- | arch/arm/Kconfig | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/calls.S | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/entry-common.S | 5 | ||||
| -rw-r--r-- | arch/arm/kernel/signal.c | 10 | 
4 files changed, 4 insertions, 14 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 67874b82a4e..caf0ba73ea3 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -56,6 +56,7 @@ config ARM  	select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND  	select MODULES_USE_ELF_REL  	select CLONE_BACKWARDS +	select GENERIC_SIGALTSTACK  	help  	  The ARM series is a line of low-power-consumption RISC chip designs  	  licensed by ARM Ltd and targeted at embedded applications and diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index a4fda4e7a37..0cc57611fc4 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S @@ -195,7 +195,7 @@  		CALL(sys_getcwd)  		CALL(sys_capget)  /* 185 */	CALL(sys_capset) -		CALL(sys_sigaltstack_wrapper) +		CALL(sys_sigaltstack)  		CALL(sys_sendfile)  		CALL(sys_ni_syscall)		/* getpmsg */  		CALL(sys_ni_syscall)		/* putpmsg */ diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index a6c301e90a3..3248cde504e 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -514,11 +514,6 @@ sys_rt_sigreturn_wrapper:  		b	sys_rt_sigreturn  ENDPROC(sys_rt_sigreturn_wrapper) -sys_sigaltstack_wrapper: -		ldr	r2, [sp, #S_OFF + S_SP] -		b	do_sigaltstack -ENDPROC(sys_sigaltstack_wrapper) -  sys_statfs64_wrapper:  		teq	r1, #88  		moveq	r1, #84 diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 56f72d257eb..f1f6d214050 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c @@ -300,7 +300,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)  	if (restore_sigframe(regs, &frame->sig))  		goto badframe; -	if (do_sigaltstack(&frame->sig.uc.uc_stack, NULL, regs->ARM_sp) == -EFAULT) +	if (restore_altstack(&frame->sig.uc.uc_stack))  		goto badframe;  	return regs->ARM_r0; @@ -486,7 +486,6 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,  	       sigset_t *set, struct pt_regs *regs)  {  	struct rt_sigframe __user *frame = get_sigframe(ka, regs, sizeof(*frame)); -	stack_t stack;  	int err = 0;  	if (!frame) @@ -497,12 +496,7 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,  	__put_user_error(0, &frame->sig.uc.uc_flags, err);  	__put_user_error(NULL, &frame->sig.uc.uc_link, err); -	memset(&stack, 0, sizeof(stack)); -	stack.ss_sp = (void __user *)current->sas_ss_sp; -	stack.ss_flags = sas_ss_flags(regs->ARM_sp); -	stack.ss_size = current->sas_ss_size; -	err |= __copy_to_user(&frame->sig.uc.uc_stack, &stack, sizeof(stack)); - +	err |= __save_altstack(&frame->sig.uc.uc_stack, regs->ARM_sp);  	err |= setup_sigframe(&frame->sig, regs, set);  	if (err == 0)  		err = setup_return(regs, ka, frame->sig.retcode, frame, usig);  |