Skip to content

Commit e95df4e

Browse files
pa1guptahansendc
authored andcommitted
x86/mmio: Disable KVM mitigation when X86_FEATURE_CLEAR_CPU_BUF is set
Currently MMIO Stale Data mitigation for CPUs not affected by MDS/TAA is to only deploy VERW at VMentry by enabling mmio_stale_data_clear static branch. No mitigation is needed for kernel->user transitions. If such CPUs are also affected by RFDS, its mitigation may set X86_FEATURE_CLEAR_CPU_BUF to deploy VERW at kernel->user and VMentry. This could result in duplicate VERW at VMentry. Fix this by disabling mmio_stale_data_clear static branch when X86_FEATURE_CLEAR_CPU_BUF is enabled. Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
1 parent 90d35da commit e95df4e

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

arch/x86/kernel/cpu/bugs.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,13 @@ static void __init mmio_select_mitigation(void)
422422
if (boot_cpu_has_bug(X86_BUG_MDS) || (boot_cpu_has_bug(X86_BUG_TAA) &&
423423
boot_cpu_has(X86_FEATURE_RTM)))
424424
setup_force_cpu_cap(X86_FEATURE_CLEAR_CPU_BUF);
425+
426+
/*
427+
* X86_FEATURE_CLEAR_CPU_BUF could be enabled by other VERW based
428+
* mitigations, disable KVM-only mitigation in that case.
429+
*/
430+
if (boot_cpu_has(X86_FEATURE_CLEAR_CPU_BUF))
431+
static_branch_disable(&mmio_stale_data_clear);
425432
else
426433
static_branch_enable(&mmio_stale_data_clear);
427434

@@ -498,8 +505,11 @@ static void __init md_clear_update_mitigation(void)
498505
taa_mitigation = TAA_MITIGATION_VERW;
499506
taa_select_mitigation();
500507
}
501-
if (mmio_mitigation == MMIO_MITIGATION_OFF &&
502-
boot_cpu_has_bug(X86_BUG_MMIO_STALE_DATA)) {
508+
/*
509+
* MMIO_MITIGATION_OFF is not checked here so that mmio_stale_data_clear
510+
* gets updated correctly as per X86_FEATURE_CLEAR_CPU_BUF state.
511+
*/
512+
if (boot_cpu_has_bug(X86_BUG_MMIO_STALE_DATA)) {
503513
mmio_mitigation = MMIO_MITIGATION_VERW;
504514
mmio_select_mitigation();
505515
}

0 commit comments

Comments
 (0)