|
Borislav Petkov |
3a4c15 |
From: Josh Poimboeuf <jpoimboe@kernel.org>
|
|
Borislav Petkov |
3a4c15 |
Date: Tue, 14 Jun 2022 23:16:06 +0200
|
|
Borislav Petkov |
3a4c15 |
Subject: x86/speculation: Fix firmware entry SPEC_CTRL handling
|
|
Borislav Petkov |
3a4c15 |
Git-commit: e6aa13622ea8283cc699cac5d018cc40a2ba2010
|
|
Borislav Petkov |
d06c64 |
Patch-mainline: v5.19-rc4
|
|
Borislav Petkov |
3a4c15 |
References: bsc#1199657 CVE-2022-29900 CVE-2022-29901
|
|
Borislav Petkov |
3a4c15 |
|
|
Borislav Petkov |
3a4c15 |
The firmware entry code may accidentally clear STIBP or SSBD. Fix that.
|
|
Borislav Petkov |
3a4c15 |
|
|
Borislav Petkov |
3a4c15 |
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
|
|
Borislav Petkov |
3a4c15 |
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
|
|
Borislav Petkov |
3a4c15 |
Signed-off-by: Borislav Petkov <bp@suse.de>
|
|
Borislav Petkov |
3a4c15 |
---
|
|
Borislav Petkov |
3a4c15 |
arch/x86/include/asm/nospec-branch.h | 10 ++++------
|
|
Borislav Petkov |
3a4c15 |
1 file changed, 4 insertions(+), 6 deletions(-)
|
|
Borislav Petkov |
3a4c15 |
|
|
Borislav Petkov |
3a4c15 |
diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
|
|
Borislav Petkov |
3a4c15 |
index 08b03c12e6c2..dee9ef77af13 100644
|
|
Borislav Petkov |
3a4c15 |
--- a/arch/x86/include/asm/nospec-branch.h
|
|
Borislav Petkov |
3a4c15 |
+++ b/arch/x86/include/asm/nospec-branch.h
|
|
Borislav Petkov |
3a4c15 |
@@ -285,18 +285,16 @@ extern u64 spec_ctrl_current(void);
|
|
Borislav Petkov |
3a4c15 |
*/
|
|
Borislav Petkov |
3a4c15 |
#define firmware_restrict_branch_speculation_start() \
|
|
Borislav Petkov |
3a4c15 |
do { \
|
|
Borislav Petkov |
3a4c15 |
- u64 val = x86_spec_ctrl_base | SPEC_CTRL_IBRS; \
|
|
Borislav Petkov |
3a4c15 |
- \
|
|
Borislav Petkov |
3a4c15 |
preempt_disable(); \
|
|
Borislav Petkov |
3a4c15 |
- alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \
|
|
Borislav Petkov |
3a4c15 |
+ alternative_msr_write(MSR_IA32_SPEC_CTRL, \
|
|
Borislav Petkov |
3a4c15 |
+ spec_ctrl_current() | SPEC_CTRL_IBRS, \
|
|
Borislav Petkov |
3a4c15 |
X86_FEATURE_USE_IBRS_FW); \
|
|
Borislav Petkov |
3a4c15 |
} while (0)
|
|
Borislav Petkov |
3a4c15 |
|
|
Borislav Petkov |
3a4c15 |
#define firmware_restrict_branch_speculation_end() \
|
|
Borislav Petkov |
3a4c15 |
do { \
|
|
Borislav Petkov |
3a4c15 |
- u64 val = x86_spec_ctrl_base; \
|
|
Borislav Petkov |
3a4c15 |
- \
|
|
Borislav Petkov |
3a4c15 |
- alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \
|
|
Borislav Petkov |
3a4c15 |
+ alternative_msr_write(MSR_IA32_SPEC_CTRL, \
|
|
Borislav Petkov |
3a4c15 |
+ spec_ctrl_current(), \
|
|
Borislav Petkov |
3a4c15 |
X86_FEATURE_USE_IBRS_FW); \
|
|
Borislav Petkov |
3a4c15 |
preempt_enable(); \
|
|
Borislav Petkov |
3a4c15 |
} while (0)
|
|
Borislav Petkov |
3a4c15 |
|