* Fix signal stack alignement on sparc64 (Closes: #569797)
svn path=/dists/sid/linux-2.6/; revision=15285
This commit is contained in:
parent
ac99de9fce
commit
f2ea7c46fb
|
@ -6,6 +6,9 @@ linux-2.6 (2.6.32-10) UNRELEASED; urgency=low
|
||||||
[ Moritz Muehlenhoff ]
|
[ Moritz Muehlenhoff ]
|
||||||
* Enable CONFIG_KEYS_DEBUG_PROC_KEYS (Closes: #400932)
|
* Enable CONFIG_KEYS_DEBUG_PROC_KEYS (Closes: #400932)
|
||||||
|
|
||||||
|
[ Aurelien Jarno ]
|
||||||
|
* Fix signal stack alignement on sparc64 (Closes: #569797)
|
||||||
|
|
||||||
-- maximilian attems <maks@debian.org> Thu, 25 Feb 2010 13:07:47 +0100
|
-- maximilian attems <maks@debian.org> Thu, 25 Feb 2010 13:07:47 +0100
|
||||||
|
|
||||||
linux-2.6 (2.6.32-9) unstable; urgency=high
|
linux-2.6 (2.6.32-9) unstable; urgency=high
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
commit 440ab7ac2d6b735fb278a1ff1674f6716314c6bb
|
||||||
|
Author: David S. Miller <davem@davemloft.net>
|
||||||
|
Date: Thu Feb 11 12:29:16 2010 -0800
|
||||||
|
|
||||||
|
sparc32: Fix thinko in previous change.
|
||||||
|
|
||||||
|
Should mask stack with 0xf not "0x15".
|
||||||
|
|
||||||
|
Noticed by Blue Swirl <blauwirbel@gmail.com>
|
||||||
|
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
commit f036d9f3985a529a81e582f68aa984eb7b20d54d
|
||||||
|
Author: David S. Miller <davem@davemloft.net>
|
||||||
|
Date: Tue Feb 9 16:18:40 2010 -0800
|
||||||
|
|
||||||
|
sparc: Align clone and signal stacks to 16 bytes.
|
||||||
|
|
||||||
|
This is mandatory for 64-bit processes, and doing it also for 32-bit
|
||||||
|
processes saves a conditional in the compat case.
|
||||||
|
|
||||||
|
This fixes the glibc/nptl/tst-stdio1 test case, as well
|
||||||
|
as many others, on 64-bit.
|
||||||
|
|
||||||
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
|
--- a/arch/sparc/kernel/process_32.c
|
||||||
|
+++ b/arch/sparc/kernel/process_32.c
|
||||||
|
@@ -526,7 +526,7 @@
|
||||||
|
* Set some valid stack frames to give to the child.
|
||||||
|
*/
|
||||||
|
childstack = (struct sparc_stackf __user *)
|
||||||
|
- (sp & ~0x7UL);
|
||||||
|
+ (sp & ~0xfUL);
|
||||||
|
parentstack = (struct sparc_stackf __user *)
|
||||||
|
regs->u_regs[UREG_FP];
|
||||||
|
|
||||||
|
--- a/arch/sparc/kernel/signal32.c
|
||||||
|
+++ b/arch/sparc/kernel/signal32.c
|
||||||
|
@@ -120,8 +120,8 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Align macros */
|
||||||
|
-#define SF_ALIGNEDSZ (((sizeof(struct signal_frame32) + 7) & (~7)))
|
||||||
|
-#define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 7) & (~7)))
|
||||||
|
+#define SF_ALIGNEDSZ (((sizeof(struct signal_frame32) + 15) & (~15)))
|
||||||
|
+#define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 15) & (~15)))
|
||||||
|
|
||||||
|
int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
|
||||||
|
{
|
||||||
|
@@ -420,15 +420,17 @@
|
||||||
|
sp = current->sas_ss_sp + current->sas_ss_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ sp -= framesize;
|
||||||
|
+
|
||||||
|
/* Always align the stack frame. This handles two cases. First,
|
||||||
|
* sigaltstack need not be mindful of platform specific stack
|
||||||
|
* alignment. Second, if we took this signal because the stack
|
||||||
|
* is not aligned properly, we'd like to take the signal cleanly
|
||||||
|
* and report that.
|
||||||
|
*/
|
||||||
|
- sp &= ~7UL;
|
||||||
|
+ sp &= ~15UL;
|
||||||
|
|
||||||
|
- return (void __user *)(sp - framesize);
|
||||||
|
+ return (void __user *) sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
|
||||||
|
--- a/arch/sparc/kernel/signal_64.c
|
||||||
|
+++ b/arch/sparc/kernel/signal_64.c
|
||||||
|
@@ -353,7 +353,7 @@
|
||||||
|
/* Checks if the fp is valid */
|
||||||
|
static int invalid_frame_pointer(void __user *fp, int fplen)
|
||||||
|
{
|
||||||
|
- if (((unsigned long) fp) & 7)
|
||||||
|
+ if (((unsigned long) fp) & 15)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -396,15 +396,17 @@
|
||||||
|
sp = current->sas_ss_sp + current->sas_ss_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ sp -= framesize;
|
||||||
|
+
|
||||||
|
/* Always align the stack frame. This handles two cases. First,
|
||||||
|
* sigaltstack need not be mindful of platform specific stack
|
||||||
|
* alignment. Second, if we took this signal because the stack
|
||||||
|
* is not aligned properly, we'd like to take the signal cleanly
|
||||||
|
* and report that.
|
||||||
|
*/
|
||||||
|
- sp &= ~7UL;
|
||||||
|
+ sp &= ~15UL;
|
||||||
|
|
||||||
|
- return (void __user *)(sp - framesize);
|
||||||
|
+ return (void __user *) sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
--- a/arch/sparc/kernel/signal_32.c
|
||||||
|
+++ b/arch/sparc/kernel/signal_32.c
|
||||||
|
@@ -267,15 +267,17 @@
|
||||||
|
sp = current->sas_ss_sp + current->sas_ss_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ sp -= framesize;
|
||||||
|
+
|
||||||
|
/* Always align the stack frame. This handles two cases. First,
|
||||||
|
* sigaltstack need not be mindful of platform specific stack
|
||||||
|
* alignment. Second, if we took this signal because the stack
|
||||||
|
* is not aligned properly, we'd like to take the signal cleanly
|
||||||
|
* and report that.
|
||||||
|
*/
|
||||||
|
- sp &= ~7UL;
|
||||||
|
+ sp &= ~15UL;
|
||||||
|
|
||||||
|
- return (void __user *)(sp - framesize);
|
||||||
|
+ return (void __user *) sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
--- a/arch/sparc/kernel/process_64.c
|
||||||
|
+++ b/arch/sparc/kernel/process_64.c
|
||||||
|
@@ -406,11 +406,11 @@
|
||||||
|
} else
|
||||||
|
__get_user(fp, &(((struct reg_window32 __user *)psp)->ins[6]));
|
||||||
|
|
||||||
|
- /* Now 8-byte align the stack as this is mandatory in the
|
||||||
|
- * Sparc ABI due to how register windows work. This hides
|
||||||
|
- * the restriction from thread libraries etc. -DaveM
|
||||||
|
+ /* Now align the stack as this is mandatory in the Sparc ABI
|
||||||
|
+ * due to how register windows work. This hides the
|
||||||
|
+ * restriction from thread libraries etc.
|
||||||
|
*/
|
||||||
|
- csp &= ~7UL;
|
||||||
|
+ csp &= ~15UL;
|
||||||
|
|
||||||
|
distance = fp - psp;
|
||||||
|
rval = (csp - distance);
|
|
@ -1 +1,2 @@
|
||||||
+ bugfix/all/tcp-fix-ICMP-RTO-war.patch
|
+ bugfix/all/tcp-fix-ICMP-RTO-war.patch
|
||||||
|
+ bugfix/sparc/stack-alignment.patch
|
||||||
|
|
Loading…
Reference in New Issue