x86/speculation: Fix firmware entry SPEC_CTRL handling
commit e6aa13622ea8283cc699cac5d018cc40a2ba2010 upstream. The firmware entry code may accidentally clear STIBP or SSBD. Fix that. Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Borislav Petkov <bp@suse.de> Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
03a575a0f9
commit
18d5a93fd2
@ -307,18 +307,16 @@ extern u64 spec_ctrl_current(void);
|
|||||||
*/
|
*/
|
||||||
#define firmware_restrict_branch_speculation_start() \
|
#define firmware_restrict_branch_speculation_start() \
|
||||||
do { \
|
do { \
|
||||||
u64 val = x86_spec_ctrl_base | SPEC_CTRL_IBRS; \
|
|
||||||
\
|
|
||||||
preempt_disable(); \
|
preempt_disable(); \
|
||||||
alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \
|
alternative_msr_write(MSR_IA32_SPEC_CTRL, \
|
||||||
|
spec_ctrl_current() | SPEC_CTRL_IBRS, \
|
||||||
X86_FEATURE_USE_IBRS_FW); \
|
X86_FEATURE_USE_IBRS_FW); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define firmware_restrict_branch_speculation_end() \
|
#define firmware_restrict_branch_speculation_end() \
|
||||||
do { \
|
do { \
|
||||||
u64 val = x86_spec_ctrl_base; \
|
alternative_msr_write(MSR_IA32_SPEC_CTRL, \
|
||||||
\
|
spec_ctrl_current(), \
|
||||||
alternative_msr_write(MSR_IA32_SPEC_CTRL, val, \
|
|
||||||
X86_FEATURE_USE_IBRS_FW); \
|
X86_FEATURE_USE_IBRS_FW); \
|
||||||
preempt_enable(); \
|
preempt_enable(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
Loading…
Reference in New Issue
Block a user