| From 8aec21c04caa2000f91cf8822ae0811e4b0c3971 Mon Sep 17 00:00:00 2001 |
| From: Sean Christopherson <seanjc@google.com> |
| Date: Tue, 4 May 2021 10:17:20 -0700 |
| Subject: KVM: VMX: Do not advertise RDPID if ENABLE_RDTSCP control is unsupported |
| |
| From: Sean Christopherson <seanjc@google.com> |
| |
| commit 8aec21c04caa2000f91cf8822ae0811e4b0c3971 upstream. |
| |
| Clear KVM's RDPID capability if the ENABLE_RDTSCP secondary exec control is |
| unsupported. Despite being enumerated in a separate CPUID flag, RDPID is |
| bundled under the same VMCS control as RDTSCP and will #UD in VMX non-root |
| if ENABLE_RDTSCP is not enabled. |
| |
| Fixes: 41cd02c6f7f6 ("kvm: x86: Expose RDPID in KVM_GET_SUPPORTED_CPUID") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Sean Christopherson <seanjc@google.com> |
| Message-Id: <20210504171734.1434054-2-seanjc@google.com> |
| Reviewed-by: Jim Mattson <jmattson@google.com> |
| Reviewed-by: Reiji Watanabe <reijiw@google.com> |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kvm/vmx/vmx.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/arch/x86/kvm/vmx/vmx.c |
| +++ b/arch/x86/kvm/vmx/vmx.c |
| @@ -7302,9 +7302,11 @@ static __init void vmx_set_cpu_caps(void |
| if (!cpu_has_vmx_xsaves()) |
| kvm_cpu_cap_clear(X86_FEATURE_XSAVES); |
| |
| - /* CPUID 0x80000001 */ |
| - if (!cpu_has_vmx_rdtscp()) |
| + /* CPUID 0x80000001 and 0x7 (RDPID) */ |
| + if (!cpu_has_vmx_rdtscp()) { |
| kvm_cpu_cap_clear(X86_FEATURE_RDTSCP); |
| + kvm_cpu_cap_clear(X86_FEATURE_RDPID); |
| + } |
| |
| if (cpu_has_vmx_waitpkg()) |
| kvm_cpu_cap_check_and_set(X86_FEATURE_WAITPKG); |