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 | |
parent | 5290dd79c0219fd2b90784d66a54d00880a21520 (diff) |
arm64: Use sigsp()
Use sigsp() instead of the open coded variant.
Signed-off-by: Richard Weinberger <richard@nod.at>
-rw-r--r-- | arch/arm64/kernel/signal.c | 12 | ||||
-rw-r--r-- | arch/arm64/kernel/signal32.c | 14 |
2 files changed, 7 insertions, 19 deletions
diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c index b29f5dab77ae..6fa792137eda 100644 --- a/arch/arm64/kernel/signal.c +++ b/arch/arm64/kernel/signal.c | |||
@@ -209,19 +209,13 @@ static int setup_sigframe(struct rt_sigframe __user *sf, | |||
209 | return err; | 209 | return err; |
210 | } | 210 | } |
211 | 211 | ||
212 | static struct rt_sigframe __user *get_sigframe(struct k_sigaction *ka, | 212 | static struct rt_sigframe __user *get_sigframe(struct ksignal *ksig, |
213 | struct pt_regs *regs) | 213 | struct pt_regs *regs) |
214 | { | 214 | { |
215 | unsigned long sp, sp_top; | 215 | unsigned long sp, sp_top; |
216 | struct rt_sigframe __user *frame; | 216 | struct rt_sigframe __user *frame; |
217 | 217 | ||
218 | sp = sp_top = regs->sp; | 218 | sp = sp_top = sigsp(regs->sp, ksig); |
219 | |||
220 | /* | ||
221 | * This is the X/Open sanctioned signal stack switching. | ||
222 | */ | ||
223 | if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp)) | ||
224 | sp = sp_top = current->sas_ss_sp + current->sas_ss_size; | ||
225 | 219 | ||
226 | sp = (sp - sizeof(struct rt_sigframe)) & ~15; | 220 | sp = (sp - sizeof(struct rt_sigframe)) & ~15; |
227 | frame = (struct rt_sigframe __user *)sp; | 221 | frame = (struct rt_sigframe __user *)sp; |
@@ -259,7 +253,7 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set, | |||
259 | struct rt_sigframe __user *frame; | 253 | struct rt_sigframe __user *frame; |
260 | int err = 0; | 254 | int err = 0; |
261 | 255 | ||
262 | frame = get_sigframe(&ksig->ka, regs); | 256 | frame = get_sigframe(ksig, regs); |
263 | if (!frame) | 257 | if (!frame) |
264 | return 1; | 258 | return 1; |
265 | 259 | ||
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; |