On Fri, May 7, 2021 at 8:08 AM Jon Kohler <jon@xxxxxxxxxxx> wrote: > > cpufeatures.h defines X86_FEATURE_RSB_CTXSW as "Fill RSB on context > switches" which seems more accurate than using X86_FEATURE_RETPOLINE > in the vmxexit path for RSB stuffing. > > X86_FEATURE_RSB_CTXSW is used for FILL_RETURN_BUFFER in > arch/x86/entry/entry_{32|64}.S. This change makes KVM vmx and svm > follow that same pattern. This pairs up nicely with the language in > bugs.c, where this cpu_cap is enabled, which indicates that RSB > stuffing should be unconditional with spectrev2 enabled. > /* > * If spectre v2 protection has been enabled, unconditionally fill > * RSB during a context switch; this protects against two independent > * issues: > * > * - RSB underflow (and switch to BTB) on Skylake+ > * - SpectreRSB variant of spectre v2 on X86_BUG_SPECTRE_V2 CPUs > */ > setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW); > > Furthermore, on X86_FEATURE_IBRS_ENHANCED CPUs && SPECTRE_V2_CMD_AUTO, > we're bypassing setting X86_FEATURE_RETPOLINE, where as far as I could > find, we should still be doing RSB stuffing no matter what when > CONFIG_RETPOLINE is enabled and spectrev2 is set to auto. If I'm reading https://software.intel.com/security-software-guidance/deep-dives/deep-dive-indirect-branch-restricted-speculation correctly, I don't think an RSB fill sequence is required on VMExit on processors w/ Enhanced IBRS. Specifically: """ On processors with enhanced IBRS, an RSB overwrite sequence may not suffice to prevent the predicted target of a near return from using an RSB entry created in a less privileged predictor mode. Software can prevent this by enabling SMEP (for transitions from user mode to supervisor mode) and by having IA32_SPEC_CTRL.IBRS set during VM exits """ On Enhanced IBRS processors, it looks like SPEC_CTRL.IBRS is set across all #VMExits via x86_virt_spec_ctrl in kvm. So is this patch needed? Thanks, -- vs;