| From 05a9e065059e566f218f8778c4d17ee75db56c55 Mon Sep 17 00:00:00 2001 |
| From: Like Xu <likexu@tencent.com> |
| Date: Wed, 26 Jan 2022 17:22:26 +0000 |
| Subject: KVM: x86: Sync the states size with the XCR0/IA32_XSS at, any time |
| |
| From: Like Xu <likexu@tencent.com> |
| |
| commit 05a9e065059e566f218f8778c4d17ee75db56c55 upstream. |
| |
| XCR0 is reset to 1 by RESET but not INIT and IA32_XSS is zeroed by |
| both RESET and INIT. The kvm_set_msr_common()'s handling of MSR_IA32_XSS |
| also needs to update kvm_update_cpuid_runtime(). In the above cases, the |
| size in bytes of the XSAVE area containing all states enabled by XCR0 or |
| (XCRO | IA32_XSS) needs to be updated. |
| |
| For simplicity and consistency, existing helpers are used to write values |
| and call kvm_update_cpuid_runtime(), and it's not exactly a fast path. |
| |
| Fixes: a554d207dc46 ("KVM: X86: Processor States following Reset or INIT") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Like Xu <likexu@tencent.com> |
| Signed-off-by: Sean Christopherson <seanjc@google.com> |
| Message-Id: <20220126172226.2298529-4-seanjc@google.com> |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kvm/x86.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/arch/x86/kvm/x86.c |
| +++ b/arch/x86/kvm/x86.c |
| @@ -11065,8 +11065,8 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcp |
| |
| vcpu->arch.msr_misc_features_enables = 0; |
| |
| - vcpu->arch.xcr0 = XFEATURE_MASK_FP; |
| - vcpu->arch.ia32_xss = 0; |
| + __kvm_set_xcr(vcpu, 0, XFEATURE_MASK_FP); |
| + __kvm_set_msr(vcpu, MSR_IA32_XSS, 0, true); |
| } |
| |
| /* All GPRs except RDX (handled below) are zeroed on RESET/INIT. */ |