x86/spec-ctrl: Use IST RSB protection for !SVM systems

There is a corner case where a VT-x guest which manages to reliably trigger
non-fatal #MC's could evade the rogue RSB speculation protections that were
supposed to be in place.

This is a lack of defence in depth; Xen does not architecturally execute more
RET than CALL instructions, so an attacker would have to locate a different
gadget (e.g. SpectreRSB) first to execute a transient path of excess RET
instructions.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2022-08-05 12:16:24 +01:00
1 parent cc7410683d
commit e570e8d520
1 file changed
+16
+16
View File
@@ -1327,8 +1327,24 @@ void __init init_speculation_mitigations(void)
* mappings.
*/
if ( opt_rsb_hvm )
{
setup_force_cpu_cap(X86_FEATURE_SC_RSB_HVM);
/*
* For SVM, Xen's RSB safety actions are performed before STGI, so
* behave atomically with respect to IST sources.
*
* For VT-x, NMIs are atomic with VMExit (the NMI gets queued but not
* delivered) whereas other IST sources are not atomic. Specifically,
* #MC can hit ahead the RSB safety action in the vmexit path.
*
* Therefore, it is necessary for the IST logic to protect Xen against
* possible rogue RSB speculation.
*/
if ( !cpu_has_svm )
default_spec_ctrl_flags |= SCF_ist_rsb;
}
ibpb_calculations();
/* Check whether Eager FPU should be enabled by default. */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.