diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-12-23 01:52:54 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-03 18:15:46 -0500 |
commit | ec93ac8663ad5fcccd44c3768b23c93b87610fc2 (patch) | |
tree | 768f321442445310520b8c839c4228aaad1e4c1d | |
parent | 0aa0203fb43f04714004b2c4ad33b858e240555d (diff) |
arm: switch to generic sigaltstack
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-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 67874b82a4ed..caf0ba73ea38 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -56,6 +56,7 @@ config ARM | |||
56 | select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND | 56 | select HAVE_MOD_ARCH_SPECIFIC if ARM_UNWIND |
57 | select MODULES_USE_ELF_REL | 57 | select MODULES_USE_ELF_REL |
58 | select CLONE_BACKWARDS | 58 | select CLONE_BACKWARDS |
59 | select GENERIC_SIGALTSTACK | ||
59 | help | 60 | help |
60 | The ARM series is a line of low-power-consumption RISC chip designs | 61 | The ARM series is a line of low-power-consumption RISC chip designs |
61 | licensed by ARM Ltd and targeted at embedded applications and | 62 | 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 a4fda4e7a372..0cc57611fc4f 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
@@ -195,7 +195,7 @@ | |||
195 | CALL(sys_getcwd) | 195 | CALL(sys_getcwd) |
196 | CALL(sys_capget) | 196 | CALL(sys_capget) |
197 | /* 185 */ CALL(sys_capset) | 197 | /* 185 */ CALL(sys_capset) |
198 | CALL(sys_sigaltstack_wrapper) | 198 | CALL(sys_sigaltstack) |
199 | CALL(sys_sendfile) | 199 | CALL(sys_sendfile) |
200 | CALL(sys_ni_syscall) /* getpmsg */ | 200 | CALL(sys_ni_syscall) /* getpmsg */ |
201 | CALL(sys_ni_syscall) /* putpmsg */ | 201 | CALL(sys_ni_syscall) /* putpmsg */ |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index a6c301e90a3b..3248cde504ed 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -514,11 +514,6 @@ sys_rt_sigreturn_wrapper: | |||
514 | b sys_rt_sigreturn | 514 | b sys_rt_sigreturn |
515 | ENDPROC(sys_rt_sigreturn_wrapper) | 515 | ENDPROC(sys_rt_sigreturn_wrapper) |
516 | 516 | ||
517 | sys_sigaltstack_wrapper: | ||
518 | ldr r2, [sp, #S_OFF + S_SP] | ||
519 | b do_sigaltstack | ||
520 | ENDPROC(sys_sigaltstack_wrapper) | ||
521 | |||
522 | sys_statfs64_wrapper: | 517 | sys_statfs64_wrapper: |
523 | teq r1, #88 | 518 | teq r1, #88 |
524 | moveq r1, #84 | 519 | moveq r1, #84 |
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 56f72d257ebd..f1f6d214050f 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) | |||
300 | if (restore_sigframe(regs, &frame->sig)) | 300 | if (restore_sigframe(regs, &frame->sig)) |
301 | goto badframe; | 301 | goto badframe; |
302 | 302 | ||
303 | if (do_sigaltstack(&frame->sig.uc.uc_stack, NULL, regs->ARM_sp) == -EFAULT) | 303 | if (restore_altstack(&frame->sig.uc.uc_stack)) |
304 | goto badframe; | 304 | goto badframe; |
305 | 305 | ||
306 | return regs->ARM_r0; | 306 | return regs->ARM_r0; |
@@ -486,7 +486,6 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, | |||
486 | sigset_t *set, struct pt_regs *regs) | 486 | sigset_t *set, struct pt_regs *regs) |
487 | { | 487 | { |
488 | struct rt_sigframe __user *frame = get_sigframe(ka, regs, sizeof(*frame)); | 488 | struct rt_sigframe __user *frame = get_sigframe(ka, regs, sizeof(*frame)); |
489 | stack_t stack; | ||
490 | int err = 0; | 489 | int err = 0; |
491 | 490 | ||
492 | if (!frame) | 491 | if (!frame) |
@@ -497,12 +496,7 @@ setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info, | |||
497 | __put_user_error(0, &frame->sig.uc.uc_flags, err); | 496 | __put_user_error(0, &frame->sig.uc.uc_flags, err); |
498 | __put_user_error(NULL, &frame->sig.uc.uc_link, err); | 497 | __put_user_error(NULL, &frame->sig.uc.uc_link, err); |
499 | 498 | ||
500 | memset(&stack, 0, sizeof(stack)); | 499 | err |= __save_altstack(&frame->sig.uc.uc_stack, regs->ARM_sp); |
501 | stack.ss_sp = (void __user *)current->sas_ss_sp; | ||
502 | stack.ss_flags = sas_ss_flags(regs->ARM_sp); | ||
503 | stack.ss_size = current->sas_ss_size; | ||
504 | err |= __copy_to_user(&frame->sig.uc.uc_stack, &stack, sizeof(stack)); | ||
505 | |||
506 | err |= setup_sigframe(&frame->sig, regs, set); | 500 | err |= setup_sigframe(&frame->sig, regs, set); |
507 | if (err == 0) | 501 | if (err == 0) |
508 | err = setup_return(regs, ka, frame->sig.retcode, frame, usig); | 502 | err = setup_return(regs, ka, frame->sig.retcode, frame, usig); |