| From: Paolo Bonzini <pbonzini@redhat.com> |
| Date: Mon, 18 Nov 2019 18:58:26 +0100 |
| Subject: KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES |
| |
| commit cbbaa2727aa3ae9e0a844803da7cef7fd3b94f2b upstream. |
| |
| 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. |
| |
| Tested-by: Jim Mattson <jmattson@google.com> |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| [bwh: Backported to 3.16: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/arch/x86/kvm/x86.c |
| +++ b/arch/x86/kvm/x86.c |
| @@ -945,10 +945,15 @@ 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; |
| } |
| |