aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.9.21/0022-x86-nospec-Simplify-alternative_msr_write.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0022-x86-nospec-Simplify-alternative_msr_write.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.9.21/0022-x86-nospec-Simplify-alternative_msr_write.patch71
1 files changed, 0 insertions, 71 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0022-x86-nospec-Simplify-alternative_msr_write.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0022-x86-nospec-Simplify-alternative_msr_write.patch
deleted file mode 100644
index aef6dcc5..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0022-x86-nospec-Simplify-alternative_msr_write.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 0ba8203bd88d5640bd6b062b09d3514d5787161d Mon Sep 17 00:00:00 2001
-From: Linus Torvalds <torvalds@linux-foundation.org>
-Date: Tue, 1 May 2018 15:55:51 +0200
-Subject: [PATCH 22/93] x86/nospec: Simplify alternative_msr_write()
-
-commit 1aa7a5735a41418d8e01fa7c9565eb2657e2ea3f upstream
-
-The macro is not type safe and I did look for why that "g" constraint for
-the asm doesn't work: it's because the asm is more fundamentally wrong.
-
-It does
-
- movl %[val], %%eax
-
-but "val" isn't a 32-bit value, so then gcc will pass it in a register,
-and generate code like
-
- movl %rsi, %eax
-
-and gas will complain about a nonsensical 'mov' instruction (it's moving a
-64-bit register to a 32-bit one).
-
-Passing it through memory will just hide the real bug - gcc still thinks
-the memory location is 64-bit, but the "movl" will only load the first 32
-bits and it all happens to work because x86 is little-endian.
-
-Convert it to a type safe inline function with a little trick which hands
-the feature into the ALTERNATIVE macro.
-
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-Reviewed-by: Ingo Molnar <mingo@kernel.org>
-Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/x86/include/asm/nospec-branch.h | 19 ++++++++++---------
- 1 file changed, 10 insertions(+), 9 deletions(-)
-
-diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
-index f928ad9..870acfc 100644
---- a/arch/x86/include/asm/nospec-branch.h
-+++ b/arch/x86/include/asm/nospec-branch.h
-@@ -241,15 +241,16 @@ static inline void vmexit_fill_RSB(void)
- #endif
- }
-
--#define alternative_msr_write(_msr, _val, _feature) \
-- asm volatile(ALTERNATIVE("", \
-- "movl %[msr], %%ecx\n\t" \
-- "movl %[val], %%eax\n\t" \
-- "movl $0, %%edx\n\t" \
-- "wrmsr", \
-- _feature) \
-- : : [msr] "i" (_msr), [val] "i" (_val) \
-- : "eax", "ecx", "edx", "memory")
-+static __always_inline
-+void alternative_msr_write(unsigned int msr, u64 val, unsigned int feature)
-+{
-+ asm volatile(ALTERNATIVE("", "wrmsr", %c[feature])
-+ : : "c" (msr),
-+ "a" (val),
-+ "d" (val >> 32),
-+ [feature] "i" (feature)
-+ : "memory");
-+}
-
- static inline void indirect_branch_prediction_barrier(void)
- {
---
-2.7.4
-