Commit cbbaa272 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES



KVM does not implement MSR_IA32_TSX_CTRL, so it must not be presented
to the guests.  It is also confusing to have !ARCH_CAP_TSX_CTRL_MSR &&
!RTM && ARCH_CAP_TAA_NO: lack of MSR_IA32_TSX_CTRL suggests TSX was not
hidden (it actually was), yet the value says that TSX is not vulnerable
to microarchitectural data sampling.  Fix both.

Cc: stable@vger.kernel.org
Tested-by: default avatarJim Mattson <jmattson@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 9cb09e7c
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -1327,12 +1327,18 @@ static u64 kvm_get_arch_capabilities(void)
	 * If TSX is disabled on the system, guests are also mitigated against
	 * TAA and clear CPU buffer mitigation is not required for guests.
	 */
	if (boot_cpu_has_bug(X86_BUG_TAA) && boot_cpu_has(X86_FEATURE_RTM) &&
	    (data & ARCH_CAP_TSX_CTRL_MSR))
	if (!boot_cpu_has(X86_FEATURE_RTM))
		data &= ~ARCH_CAP_TAA_NO;
	else if (!boot_cpu_has_bug(X86_BUG_TAA))
		data |= ARCH_CAP_TAA_NO;
	else if (data & ARCH_CAP_TSX_CTRL_MSR)
		data &= ~ARCH_CAP_MDS_NO;

	/* KVM does not emulate MSR_IA32_TSX_CTRL.  */
	data &= ~ARCH_CAP_TSX_CTRL_MSR;
	return data;
}
EXPORT_SYMBOL_GPL(kvm_get_arch_capabilities);

static int kvm_get_msr_feature(struct kvm_msr_entry *msr)
{