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