diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.4/0215-copy_from_user-CPU_SW_DOMAIN_PAN-compatibility.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.4/0215-copy_from_user-CPU_SW_DOMAIN_PAN-compatibility.patch | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/target/linux/brcm2708/patches-4.4/0215-copy_from_user-CPU_SW_DOMAIN_PAN-compatibility.patch b/target/linux/brcm2708/patches-4.4/0215-copy_from_user-CPU_SW_DOMAIN_PAN-compatibility.patch deleted file mode 100644 index 2d8b374d37..0000000000 --- a/target/linux/brcm2708/patches-4.4/0215-copy_from_user-CPU_SW_DOMAIN_PAN-compatibility.patch +++ /dev/null @@ -1,53 +0,0 @@ -From cfe94ad9e10d75790f783296006c60fb89beb321 Mon Sep 17 00:00:00 2001 -From: Phil Elwell <phil@raspberrypi.org> -Date: Tue, 29 Mar 2016 15:32:30 +0100 -Subject: [PATCH] copy_from_user: CPU_SW_DOMAIN_PAN compatibility - -The downstream copy_from_user acceleration must also play nice with -CONFIG_CPU_SW_DOMAIN_PAN. - -See: https://github.com/raspberrypi/linux/issues/1381 - -Signed-off-by: Phil Elwell <phil@raspberrypi.org> ---- - arch/arm/lib/uaccess_with_memcpy.c | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - ---- a/arch/arm/lib/uaccess_with_memcpy.c -+++ b/arch/arm/lib/uaccess_with_memcpy.c -@@ -186,6 +186,7 @@ out: - unsigned long noinline - __copy_from_user_memcpy(void *to, const void __user *from, unsigned long n) - { -+ unsigned long ua_flags; - int atomic; - - if (unlikely(segment_eq(get_fs(), KERNEL_DS))) { -@@ -217,7 +218,9 @@ __copy_from_user_memcpy(void *to, const - if (tocopy > n) - tocopy = n; - -+ ua_flags = uaccess_save_and_enable(); - memcpy(to, (const void *)from, tocopy); -+ uaccess_restore(ua_flags); - to += tocopy; - from += tocopy; - n -= tocopy; -@@ -261,9 +264,14 @@ arm_copy_from_user(void *to, const void - * With frame pointer disabled, tail call optimization kicks in - * as well making this test almost invisible. - */ -- if (n < COPY_FROM_USER_THRESHOLD) -- return __copy_from_user_std(to, from, n); -- return __copy_from_user_memcpy(to, from, n); -+ if (n < COPY_TO_USER_THRESHOLD) { -+ unsigned long ua_flags = uaccess_save_and_enable(); -+ n = __copy_from_user_std(to, from, n); -+ uaccess_restore(ua_flags); -+ } else { -+ n = __copy_from_user_memcpy(to, from, n); -+ } -+ return n; - } - - static unsigned long noinline |