diff options
author | Richard Weinberger <richard@nod.at> | 2014-03-05 07:31:20 -0500 |
---|---|---|
committer | Richard Weinberger <richard@sigma-star.at> | 2014-08-06 07:03:45 -0400 |
commit | 38a7be3c280bb9f9c4c892cf5ff51c847e959cf1 (patch) | |
tree | a50c1b3486c3adac679682a602cba944f7b6c388 /arch/arm64/kernel/signal32.c | |
parent | 5290dd79c0219fd2b90784d66a54d00880a21520 (diff) |
arm64: Use sigsp()
Use sigsp() instead of the open coded variant.
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/arm64/kernel/signal32.c')
-rw-r--r-- | arch/arm64/kernel/signal32.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index b69ee6921c48..1a5c5bfa8ea4 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c | |||
@@ -407,20 +407,14 @@ badframe: | |||
407 | return 0; | 407 | return 0; |
408 | } | 408 | } |
409 | 409 | ||
410 | static void __user *compat_get_sigframe(struct k_sigaction *ka, | 410 | static void __user *compat_get_sigframe(struct ksignal *ksig, |
411 | struct pt_regs *regs, | 411 | struct pt_regs *regs, |
412 | int framesize) | 412 | int framesize) |
413 | { | 413 | { |
414 | compat_ulong_t sp = regs->compat_sp; | 414 | compat_ulong_t sp = sigsp(regs->compat_sp, ksig); |
415 | void __user *frame; | 415 | void __user *frame; |
416 | 416 | ||
417 | /* | 417 | /* |
418 | * This is the X/Open sanctioned signal stack switching. | ||
419 | */ | ||
420 | if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp)) | ||
421 | sp = current->sas_ss_sp + current->sas_ss_size; | ||
422 | |||
423 | /* | ||
424 | * ATPCS B01 mandates 8-byte alignment | 418 | * ATPCS B01 mandates 8-byte alignment |
425 | */ | 419 | */ |
426 | frame = compat_ptr((compat_uptr_t)((sp - framesize) & ~7)); | 420 | frame = compat_ptr((compat_uptr_t)((sp - framesize) & ~7)); |
@@ -526,7 +520,7 @@ int compat_setup_rt_frame(int usig, struct ksignal *ksig, | |||
526 | struct compat_rt_sigframe __user *frame; | 520 | struct compat_rt_sigframe __user *frame; |
527 | int err = 0; | 521 | int err = 0; |
528 | 522 | ||
529 | frame = compat_get_sigframe(&ksig->ka, regs, sizeof(*frame)); | 523 | frame = compat_get_sigframe(ksig, regs, sizeof(*frame)); |
530 | 524 | ||
531 | if (!frame) | 525 | if (!frame) |
532 | return 1; | 526 | return 1; |
@@ -555,7 +549,7 @@ int compat_setup_frame(int usig, struct ksignal *ksig, sigset_t *set, | |||
555 | struct compat_sigframe __user *frame; | 549 | struct compat_sigframe __user *frame; |
556 | int err = 0; | 550 | int err = 0; |
557 | 551 | ||
558 | frame = compat_get_sigframe(&ksig->ka, regs, sizeof(*frame)); | 552 | frame = compat_get_sigframe(ksig, regs, sizeof(*frame)); |
559 | 553 | ||
560 | if (!frame) | 554 | if (!frame) |
561 | return 1; | 555 | return 1; |