[kernel] r15285 - in dists/sid/linux-2.6/debian: . patches/bugfix/sparc patches/series
Aurelien Jarno
aurel32 at alioth.debian.org
Sat Feb 27 01:49:54 UTC 2010
Author: aurel32
Date: Sat Feb 27 01:49:52 2010
New Revision: 15285
Log:
* Fix signal stack alignement on sparc64 (Closes: #569797)
Added:
dists/sid/linux-2.6/debian/patches/bugfix/sparc/stack-alignment.patch
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/patches/series/10
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog Sat Feb 27 01:27:58 2010 (r15284)
+++ dists/sid/linux-2.6/debian/changelog Sat Feb 27 01:49:52 2010 (r15285)
@@ -6,6 +6,9 @@
[ Moritz Muehlenhoff ]
* Enable CONFIG_KEYS_DEBUG_PROC_KEYS (Closes: #400932)
+ [ Aurelien Jarno ]
+ * Fix signal stack alignement on sparc64 (Closes: #569797)
+
-- maximilian attems <maks at debian.org> Thu, 25 Feb 2010 13:07:47 +0100
linux-2.6 (2.6.32-9) unstable; urgency=high
Added: dists/sid/linux-2.6/debian/patches/bugfix/sparc/stack-alignment.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/sparc/stack-alignment.patch Sat Feb 27 01:49:52 2010 (r15285)
@@ -0,0 +1,141 @@
+commit 440ab7ac2d6b735fb278a1ff1674f6716314c6bb
+Author: David S. Miller <davem at 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 at gmail.com>
+
+ Signed-off-by: David S. Miller <davem at davemloft.net>
+
+commit f036d9f3985a529a81e582f68aa984eb7b20d54d
+Author: David S. Miller <davem at 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 at 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);
Modified: dists/sid/linux-2.6/debian/patches/series/10
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/10 Sat Feb 27 01:27:58 2010 (r15284)
+++ dists/sid/linux-2.6/debian/patches/series/10 Sat Feb 27 01:49:52 2010 (r15285)
@@ -1 +1,2 @@
+ bugfix/all/tcp-fix-ICMP-RTO-war.patch
++ bugfix/sparc/stack-alignment.patch
More information about the Kernel-svn-changes
mailing list