diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0004-x86-asm-Fix-inline-asm-call-constraints-for-GCC-4.4.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.9.21/0004-x86-asm-Fix-inline-asm-call-constraints-for-GCC-4.4.patch | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0004-x86-asm-Fix-inline-asm-call-constraints-for-GCC-4.4.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0004-x86-asm-Fix-inline-asm-call-constraints-for-GCC-4.4.patch deleted file mode 100644 index 990cb048..00000000 --- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0004-x86-asm-Fix-inline-asm-call-constraints-for-GCC-4.4.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 06424642a3712e54821ac22bba000779c0004faa Mon Sep 17 00:00:00 2001 -From: Josh Poimboeuf <jpoimboe@redhat.com> -Date: Thu, 28 Sep 2017 16:58:26 -0500 -Subject: [PATCH 04/42] x86/asm: Fix inline asm call constraints for GCC 4.4 - -commit 520a13c530aeb5f63e011d668c42db1af19ed349 upstream. - -The kernel test bot (run by Xiaolong Ye) reported that the following commit: - - f5caf621ee35 ("x86/asm: Fix inline asm call constraints for Clang") - -is causing double faults in a kernel compiled with GCC 4.4. - -Linus subsequently diagnosed the crash pattern and the buggy commit and found that -the issue is with this code: - - register unsigned int __asm_call_sp asm("esp"); - #define ASM_CALL_CONSTRAINT "+r" (__asm_call_sp) - -Even on a 64-bit kernel, it's using ESP instead of RSP. That causes GCC -to produce the following bogus code: - - ffffffff8147461d: 89 e0 mov %esp,%eax - ffffffff8147461f: 4c 89 f7 mov %r14,%rdi - ffffffff81474622: 4c 89 fe mov %r15,%rsi - ffffffff81474625: ba 20 00 00 00 mov $0x20,%edx - ffffffff8147462a: 89 c4 mov %eax,%esp - ffffffff8147462c: e8 bf 52 05 00 callq ffffffff814c98f0 <copy_user_generic_unrolled> - -Despite the absurdity of it backing up and restoring the stack pointer -for no reason, the bug is actually the fact that it's only backing up -and restoring the lower 32 bits of the stack pointer. The upper 32 bits -are getting cleared out, corrupting the stack pointer. - -So change the '__asm_call_sp' register variable to be associated with -the actual full-size stack pointer. - -This also requires changing the __ASM_SEL() macro to be based on the -actual compiled arch size, rather than the CONFIG value, because -CONFIG_X86_64 compiles some files with '-m32' (e.g., realmode and vdso). -Otherwise Clang fails to build the kernel because it complains about the -use of a 64-bit register (RSP) in a 32-bit file. - -Reported-and-Bisected-and-Tested-by: kernel test robot <xiaolong.ye@intel.com> -Diagnosed-by: Linus Torvalds <torvalds@linux-foundation.org> -Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> -Cc: Alexander Potapenko <glider@google.com> -Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> -Cc: Andy Lutomirski <luto@kernel.org> -Cc: Arnd Bergmann <arnd@arndb.de> -Cc: Dmitriy Vyukov <dvyukov@google.com> -Cc: LKP <lkp@01.org> -Cc: Linus Torvalds <torvalds@linux-foundation.org> -Cc: Matthias Kaehlcke <mka@chromium.org> -Cc: Miguel Bernal Marin <miguel.bernal.marin@linux.intel.com> -Cc: Peter Zijlstra <peterz@infradead.org> -Cc: Thomas Gleixner <tglx@linutronix.de> -Fixes: f5caf621ee35 ("x86/asm: Fix inline asm call constraints for Clang") -Link: http://lkml.kernel.org/r/20170928215826.6sdpmwtkiydiytim@treble -Signed-off-by: Ingo Molnar <mingo@kernel.org> -Cc: Matthias Kaehlcke <mka@chromium.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- - arch/x86/include/asm/asm.h | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h -index 0052352..7bb29a4 100644 ---- a/arch/x86/include/asm/asm.h -+++ b/arch/x86/include/asm/asm.h -@@ -11,10 +11,12 @@ - # define __ASM_FORM_COMMA(x) " " #x "," - #endif - --#ifdef CONFIG_X86_32 -+#ifndef __x86_64__ -+/* 32 bit */ - # define __ASM_SEL(a,b) __ASM_FORM(a) - # define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(a) - #else -+/* 64 bit */ - # define __ASM_SEL(a,b) __ASM_FORM(b) - # define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(b) - #endif --- -2.7.4 - |