From 47d0693c0d26d23c53a07473908f72d4e7590448 Mon Sep 17 00:00:00 2001 From: Jurij Smakov Date: Tue, 24 Oct 2006 03:01:51 +0000 Subject: [PATCH] * [sparc] Add bugfix/sparc/compat-alloc-user-space-alignment.patch (thanks to David Miller) to make sure that compat_alloc_user_space() always returns memory aligned on a 8-byte boundary on sparc. This prevents a number of unaligned memory accesses, like the ones in sys_msgrcv() and compat_sys_msgrcv(), triggered every 5 seconds whenever fakeroot is running. svn path=/dists/trunk/linux-2.6/; revision=7641 --- debian/changelog | 6 +++ .../compat-alloc-user-space-alignment.patch | 42 +++++++++++++++++++ debian/patches/series/4 | 1 + 3 files changed, 49 insertions(+) create mode 100644 debian/patches/bugfix/sparc/compat-alloc-user-space-alignment.patch diff --git a/debian/changelog b/debian/changelog index d52461598..216c41e3c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,12 @@ linux-2.6 (2.6.18-4) UNRELEASED; urgency=low * [sparc] Add bugfix/sparc/sunblade-clock-hang.patch, fixing the boot-time crash during clock probing on SunBlade 100/150 due to incorrect mapping of PCI resources. (closes: #392078) + * [sparc] Add bugfix/sparc/compat-alloc-user-space-alignment.patch + (thanks to David Miller) to make sure that compat_alloc_user_space() + always returns memory aligned on a 8-byte boundary on sparc. This + prevents a number of unaligned memory accesses, like the ones in + sys_msgrcv() and compat_sys_msgrcv(), triggered every 5 seconds whenever + fakeroot is running. -- Norbert Tretkowski Sat, 21 Oct 2006 18:52:12 +0200 diff --git a/debian/patches/bugfix/sparc/compat-alloc-user-space-alignment.patch b/debian/patches/bugfix/sparc/compat-alloc-user-space-alignment.patch new file mode 100644 index 000000000..010ae4e6f --- /dev/null +++ b/debian/patches/bugfix/sparc/compat-alloc-user-space-alignment.patch @@ -0,0 +1,42 @@ +commit a94b1d1fd7ca3129e1d38d38167779fa6ee69780 +Author: David S. Miller +Date: Sun Oct 22 21:53:30 2006 -0700 + + [SPARC64]: 8-byte align return value from compat_alloc_user_space() + + Otherwise we get a ton of unaligned exceptions, for cases such + as compat_sys_msgrcv() which go: + + p = compat_alloc_user_space(second + sizeof(struct msgbuf)); + + and here 'second' can for example be an arbitrary odd value. + + Based upon a bug report from Jurij Smakov. + + Signed-off-by: David S. Miller + +diff --git a/include/asm-sparc64/compat.h b/include/asm-sparc64/compat.h +index c73935d..36511ca 100644 +--- a/include/asm-sparc64/compat.h ++++ b/include/asm-sparc64/compat.h +@@ -164,7 +164,7 @@ static inline compat_uptr_t ptr_to_compa + return (u32)(unsigned long)uptr; + } + +-static __inline__ void __user *compat_alloc_user_space(long len) ++static inline void __user *compat_alloc_user_space(long len) + { + struct pt_regs *regs = current_thread_info()->kregs; + unsigned long usp = regs->u_regs[UREG_I6]; +@@ -174,7 +174,10 @@ static __inline__ void __user *compat_al + else + usp &= 0xffffffffUL; + +- return (void __user *) (usp - len); ++ usp -= len; ++ usp &= ~0x7UL; ++ ++ return (void __user *) usp; + } + + struct compat_ipc64_perm { diff --git a/debian/patches/series/4 b/debian/patches/series/4 index 29c5bc521..8e423a166 100644 --- a/debian/patches/series/4 +++ b/debian/patches/series/4 @@ -1,2 +1,3 @@ - sparc64-atyfb-xl-gr.patch + bugfix/sparc/sunblade-clock-hang.patch ++ bugfix/sparc/compat-alloc-user-space-alignment.patch