[kernel/f18: 6/6] add patch to revert ARM misaligned access check to stop kernel OOPS, actually apply highbank sata pa
Peter Robinson
pbrobinson at fedoraproject.org
Mon Oct 22 08:46:17 UTC 2012
commit 6419bc968389dfcbfcd7dd4ade75f54c9531b4c6
Author: Peter Robinson <pbrobinson at gmail.com>
Date: Mon Oct 22 09:45:28 2012 +0100
add patch to revert ARM misaligned access check to stop kernel OOPS, actually apply highbank sata patch
...vert-missaligned-access-check-on-put_user.patch | 83 ++++++++++++++++++++
kernel.spec | 15 ++--
2 files changed, 90 insertions(+), 8 deletions(-)
---
diff --git a/arm-linux-3.6-revert-missaligned-access-check-on-put_user.patch b/arm-linux-3.6-revert-missaligned-access-check-on-put_user.patch
new file mode 100644
index 0000000..1558066
--- /dev/null
+++ b/arm-linux-3.6-revert-missaligned-access-check-on-put_user.patch
@@ -0,0 +1,83 @@
+commit dd945918f747f61eff384f5cb8889e524f60615a
+Author: Jon Masters <jcm at jonmasters.org>
+Date: Fri Oct 5 22:32:29 2012 -0400
+
+ Revert "ARM: 7528/1: uaccess: annotate [__]{get,put}_user functions with might_fault()"
+
+ This reverts commit ad72907acd2943304c292ae36960bb66e6dc23c9.
+
+ Technically, the original commit is totally correct, however it exposes
+ a deep-rooted problem with missaligned accesses in e.g. the networking
+ stack and we need to revert this (sweep under rug) until we can get
+ a good solution in place upstream. The problem is that the compiler
+ believes the structs concerned are aligned (they are in the code),
+ however at runtime the IP structs are actually not aligned within
+ received network packets, and the fault handler is not guaranteed
+ to be entirely atomic and free of calls to the scheduler.
+
+ Signed-off-by: Jon Masters <jcm at jonmasters.org>
+
+diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
+index 77bd79f..6f83ad6 100644
+--- a/arch/arm/include/asm/uaccess.h
++++ b/arch/arm/include/asm/uaccess.h
+@@ -118,7 +118,7 @@ extern int __get_user_4(void *);
+ : "0" (__p), "r" (__l) \
+ : __GUP_CLOBBER_##__s)
+
+-#define __get_user_check(x,p) \
++#define get_user(x,p) \
+ ({ \
+ unsigned long __limit = current_thread_info()->addr_limit - 1; \
+ register const typeof(*(p)) __user *__p asm("r0") = (p);\
+@@ -141,12 +141,6 @@ extern int __get_user_4(void *);
+ __e; \
+ })
+
+-#define get_user(x,p) \
+- ({ \
+- might_fault(); \
+- __get_user_check(x,p); \
+- })
+-
+ extern int __put_user_1(void *, unsigned int);
+ extern int __put_user_2(void *, unsigned int);
+ extern int __put_user_4(void *, unsigned int);
+@@ -161,7 +155,7 @@ extern int __put_user_8(void *, unsigned long long);
+ : "0" (__p), "r" (__r2), "r" (__l) \
+ : "ip", "lr", "cc")
+
+-#define __put_user_check(x,p) \
++#define put_user(x,p) \
+ ({ \
+ unsigned long __limit = current_thread_info()->addr_limit - 1; \
+ register const typeof(*(p)) __r2 asm("r2") = (x); \
+@@ -186,12 +180,6 @@ extern int __put_user_8(void *, unsigned long long);
+ __e; \
+ })
+
+-#define put_user(x,p) \
+- ({ \
+- might_fault(); \
+- __put_user_check(x,p); \
+- })
+-
+ #else /* CONFIG_MMU */
+
+ /*
+@@ -245,7 +233,6 @@ do { \
+ unsigned long __gu_addr = (unsigned long)(ptr); \
+ unsigned long __gu_val; \
+ __chk_user_ptr(ptr); \
+- might_fault(); \
+ switch (sizeof(*(ptr))) { \
+ case 1: __get_user_asm_byte(__gu_val,__gu_addr,err); break; \
+ case 2: __get_user_asm_half(__gu_val,__gu_addr,err); break; \
+@@ -327,7 +314,6 @@ do { \
+ unsigned long __pu_addr = (unsigned long)(ptr); \
+ __typeof__(*(ptr)) __pu_val = (x); \
+ __chk_user_ptr(ptr); \
+- might_fault(); \
+ switch (sizeof(*(ptr))) { \
+ case 1: __put_user_asm_byte(__pu_val,__pu_addr,err); break; \
+ case 2: __put_user_asm_half(__pu_val,__pu_addr,err); break; \
diff --git a/kernel.spec b/kernel.spec
index cc60adb..ea14cb2 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -733,6 +733,7 @@ Patch19001: i82975x-edac-fix.patch
Patch21000: arm-read_current_timer.patch
Patch21001: arm-fix-omapdrm.patch
Patch21002: arm-fix_radio_shark.patch
+Patch21003: arm-linux-3.6-revert-missaligned-access-check-on-put_user.patch
# OMAP
# ARM tegra
@@ -747,10 +748,6 @@ Patch21010: arm-highbank-sata-fix.patch
Patch21020: arm-smdk310-regulator-fix.patch
Patch21021: arm-origen-regulator-fix.patch
-# ARM exynos4
-Patch21020: arm-smdk310-regulator-fix.patch
-Patch21021: arm-origen-regulator-fix.patch
-
Patch21094: power-x86-destdir.patch
#rhbz 754518
@@ -1356,10 +1353,8 @@ ApplyPatch arm-fix_radio_shark.patch
ApplyPatch arm-tegra-nvec-kconfig.patch
ApplyPatch arm-tegra-usb-no-reset-linux33.patch
ApplyPatch arm-tegra-sdhci-module-fix.patch
-
-ApplyPatch arm-smdk310-regulator-fix.patch
-ApplyPatch arm-origen-regulator-fix.patch
-
+ApplyPatch arm-highbank-sata-fix.patch
+ApplyPatch arm-linux-3.6-revert-missaligned-access-check-on-put_user.patch
ApplyPatch arm-smdk310-regulator-fix.patch
ApplyPatch arm-origen-regulator-fix.patch
@@ -2353,6 +2348,10 @@ fi
# ||----w |
# || ||
%changelog
+* Mon Oct 22 2012 Peter Robinson <pbrobinson at fedoraproject.org>
+- Revert ARM misaligned access check to stop kernel OOPS
+- Actually apply highbank sata patch
+
* Thu Oct 18 2012 Josh Boyer <jwboyer at redhat.com>
- Patch to have mac80211 connect with HT20 if HT40 is not allowed (rhbz 866013)
- Enable VFIO (rhbz 867152)
More information about the scm-commits
mailing list