aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/kernel/signal32.c
diff options
context:
space:
mode:
authorRichard Weinberger <richard@nod.at>2014-03-05 07:31:20 -0500
committerRichard Weinberger <richard@sigma-star.at>2014-08-06 07:03:45 -0400
commit38a7be3c280bb9f9c4c892cf5ff51c847e959cf1 (patch)
treea50c1b3486c3adac679682a602cba944f7b6c388 /arch/arm64/kernel/signal32.c
parent5290dd79c0219fd2b90784d66a54d00880a21520 (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.c14
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
410static void __user *compat_get_sigframe(struct k_sigaction *ka, 410static 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;