History

x86/speculation: Fix firmware entry SPEC_CTRL handling

The firmware entry code may accidentally clear STIBP or SSBD. Fix that.

Josh Poimboeuf committed 4 years ago

Commit e6aa1361 parent b2620fa1 file · +4 −6Browse files

Unified · Split

arch/x86/include/asm/nospec-branch.h+4−6
@@ -285,18 +285,16 @@ extern u64 spec_ctrl_current(void); · 284 unmodified lines
285285 */
286286 #define firmware_restrict_branch_speculation_start() \
287287 do { \
288− u64 val = x86_spec_ctrl_base | SPEC_CTRL_IBRS; \
289− \
290288 preempt_disable(); \
291− alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \
289+ alternative_msr_write(MSR_IA32_SPEC_CTRL, \
290+ spec_ctrl_current() | SPEC_CTRL_IBRS, \
292291 X86_FEATURE_USE_IBRS_FW); \
293292 } while (0)
294293
295294 #define firmware_restrict_branch_speculation_end() \
296295 do { \
297− u64 val = x86_spec_ctrl_base; \
298− \
299− alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \
296+ alternative_msr_write(MSR_IA32_SPEC_CTRL, \
297+ spec_ctrl_current(), \
300298 X86_FEATURE_USE_IBRS_FW); \
301299 preempt_enable(); \
302300 } while (0)