242ab9ac7a
gcc-fix-put-user.patch doesn't apply cleanly to any kernel that includes commit 538094 ("ARM: 8051/1: put_user: fix possible data corruption in put_user") or a backport of it because the surrounding lines (context) of the patch are different: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=537094b64b229bf3ad146042f83e74cf6abe59df This commit fixes the problem by removing the context from the patch. It also changes linux-sony-amami, linux-sony-aries, and linux-sony-taoshan to use the shared patch. I have confirmed that all six affected kernels still compile. [skip ci]
39 lines
1.7 KiB
Diff
39 lines
1.7 KiB
Diff
From 8c8187d41b99acd4f2078d0fff6807e0eeb47407 Mon Sep 17 00:00:00 2001
|
|
From: Arnd Bergmann <arnd@arndb.de>
|
|
Date: Thu, 26 Jul 2018 10:13:23 +0200
|
|
Subject: [PATCH] ARM: fix put_user() for gcc-8
|
|
|
|
Building kernels before linux-4.7 with gcc-8 results in many build failures
|
|
when gcc triggers a check that was meant to catch broken compilers:
|
|
|
|
/tmp/ccCGMQmS.s:648: Error: .err encountered
|
|
|
|
According to the discussion in the gcc bugzilla, a local "register
|
|
asm()" variable is still supposed to be the correct way to force an
|
|
inline assembly to use a particular register, but marking it 'const'
|
|
lets the compiler do optimizations that break that, i.e the compiler is
|
|
free to treat the variable as either 'const' or 'register' in that case.
|
|
|
|
Upstream commit 9f73bd8bb445 ("ARM: uaccess: remove put_user() code
|
|
duplication") fixed this problem in linux-4.8 as part of a larger change,
|
|
but seems a little too big to be backported to 4.4.
|
|
|
|
Let's take the simplest fix and change only the one broken line in the
|
|
same way as newer kernels.
|
|
|
|
Suggested-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
|
|
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85745
|
|
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86673
|
|
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
arch/arm/include/asm/uaccess.h | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
|
|
index b04850fdeb5..f8ad54b24ac 100644
|
|
--- a/arch/arm/include/asm/uaccess.h
|
|
+++ b/arch/arm/include/asm/uaccess.h
|
|
@@ -162 +162 @@ extern int __put_user_8(void *, unsigned long long);
|
|
- register const typeof(*(p)) __r2 asm("r2") = (x); \
|
|
+ register typeof(*(p)) __r2 asm("r2") = (x); \
|