mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/spec-ctrl: Cease using thunk=lfence on AMD
AMD have updated their Spectre v2 guidance, and lfence/jmp is no longer
considered safe. AMD are recommending using retpoline everywhere.
Update the default heuristics to never select THUNK_LFENCE.
This is part of XSA-398 / CVE-2021-26401.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
(cherry picked from commit 8d03080d2a)
This commit is contained in:
1 parent
21f5a7b226
commit
944afa38d9
2 files changed
+5
-11
No files matched your search
@@ -1960,9 +1960,9 @@ to use.
|
||||
|
||||
If Xen was compiled with INDIRECT_THUNK support, `bti-thunk=` can be used to
|
||||
select which of the thunks gets patched into the `__x86_indirect_thunk_%reg`
|
||||
locations. The default thunk is `retpoline` (generally preferred for Intel
|
||||
hardware), with the alternatives being `jmp` (a `jmp *%reg` gadget, minimal
|
||||
overhead), and `lfence` (an `lfence; jmp *%reg` gadget, preferred for AMD).
|
||||
locations. The default thunk is `retpoline` (generally preferred), with the
|
||||
alternatives being `jmp` (a `jmp *%reg` gadget, minimal overhead), and
|
||||
`lfence` (an `lfence; jmp *%reg` gadget).
|
||||
|
||||
On hardware supporting IBRS (Indirect Branch Restricted Speculation), the
|
||||
`ibrs=` option can be used to force or prevent Xen using the feature itself.
|
||||
|
||||
@@ -904,16 +904,10 @@ void __init init_speculation_mitigations(void)
|
||||
if ( IS_ENABLED(CONFIG_INDIRECT_THUNK) )
|
||||
{
|
||||
/*
|
||||
* AMD's recommended mitigation is to set lfence as being dispatch
|
||||
* serialising, and to use IND_THUNK_LFENCE.
|
||||
*/
|
||||
if ( cpu_has_lfence_dispatch )
|
||||
thunk = THUNK_LFENCE;
|
||||
/*
|
||||
* On Intel hardware, we'd like to use retpoline in preference to
|
||||
* On all hardware, we'd like to use retpoline in preference to
|
||||
* IBRS, but only if it is safe on this hardware.
|
||||
*/
|
||||
else if ( retpoline_safe(caps) )
|
||||
if ( retpoline_safe(caps) )
|
||||
thunk = THUNK_RETPOLINE;
|
||||
else if ( boot_cpu_has(X86_FEATURE_IBRSB) )
|
||||
ibrs = true;
|
||||
|
||||