diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-11 17:00:27 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-02-11 17:00:27 -0500 |
| commit | f2d6cff7f5255985939fb752daee4fab397ed61d (patch) | |
| tree | 0dee8087cce187ad3272f9cc18457e879ffd78c9 /arch/sparc/kernel/signal32.c | |
| parent | 803bf5ec259941936262d10ecc84511b76a20921 (diff) | |
| parent | 440ab7ac2d6b735fb278a1ff1674f6716314c6bb (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
sparc32: Fix thinko in previous change.
sparc: Align clone and signal stacks to 16 bytes.
Diffstat (limited to 'arch/sparc/kernel/signal32.c')
| -rw-r--r-- | arch/sparc/kernel/signal32.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/sparc/kernel/signal32.c b/arch/sparc/kernel/signal32.c index ba5b09ad6666..ea22cd373c64 100644 --- a/arch/sparc/kernel/signal32.c +++ b/arch/sparc/kernel/signal32.c | |||
| @@ -120,8 +120,8 @@ struct rt_signal_frame32 { | |||
| 120 | }; | 120 | }; |
| 121 | 121 | ||
| 122 | /* Align macros */ | 122 | /* Align macros */ |
| 123 | #define SF_ALIGNEDSZ (((sizeof(struct signal_frame32) + 7) & (~7))) | 123 | #define SF_ALIGNEDSZ (((sizeof(struct signal_frame32) + 15) & (~15))) |
| 124 | #define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 7) & (~7))) | 124 | #define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 15) & (~15))) |
| 125 | 125 | ||
| 126 | int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) | 126 | int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) |
| 127 | { | 127 | { |
| @@ -420,15 +420,17 @@ static void __user *get_sigframe(struct sigaction *sa, struct pt_regs *regs, uns | |||
| 420 | sp = current->sas_ss_sp + current->sas_ss_size; | 420 | sp = current->sas_ss_sp + current->sas_ss_size; |
| 421 | } | 421 | } |
| 422 | 422 | ||
| 423 | sp -= framesize; | ||
| 424 | |||
| 423 | /* Always align the stack frame. This handles two cases. First, | 425 | /* Always align the stack frame. This handles two cases. First, |
| 424 | * sigaltstack need not be mindful of platform specific stack | 426 | * sigaltstack need not be mindful of platform specific stack |
| 425 | * alignment. Second, if we took this signal because the stack | 427 | * alignment. Second, if we took this signal because the stack |
| 426 | * is not aligned properly, we'd like to take the signal cleanly | 428 | * is not aligned properly, we'd like to take the signal cleanly |
| 427 | * and report that. | 429 | * and report that. |
| 428 | */ | 430 | */ |
| 429 | sp &= ~7UL; | 431 | sp &= ~15UL; |
| 430 | 432 | ||
| 431 | return (void __user *)(sp - framesize); | 433 | return (void __user *) sp; |
| 432 | } | 434 | } |
| 433 | 435 | ||
| 434 | static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) | 436 | static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) |
