| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- From 61fe0ac44f8d9714accad28bab0179d85f969b23 Mon Sep 17 00:00:00 2001
- From: Maxim Levitsky <[email protected]>
- Date: Tue, 25 Oct 2022 15:47:40 +0300
- Subject: [PATCH] KVM: x86: SVM: don't save SVM state to SMRAM when VM is not
- long mode capable
- When the guest CPUID doesn't have support for long mode, 32 bit SMRAM
- layout is used and it has no support for preserving EFER and/or SVM
- state.
- Note that this isn't relevant to running 32 bit guests on VM which is
- long mode capable - such VM can still run 32 bit guests in compatibility
- mode.
- Signed-off-by: Maxim Levitsky <[email protected]>
- ---
- arch/x86/kvm/svm/svm.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
- diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
- index 44d6a2240e9e..9f2e3fe3dcd7 100644
- --- a/arch/x86/kvm/svm/svm.c
- +++ b/arch/x86/kvm/svm/svm.c
- @@ -4446,6 +4446,14 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram)
- if (!is_guest_mode(vcpu))
- return 0;
-
- + /*
- + * 32-bit SMRAM format doesn't preserve EFER and SVM state. Userspace is
- + * responsible for ensuring nested SVM and SMIs are mutually exclusive.
- + */
- +
- + if (!guest_cpuid_has(vcpu, X86_FEATURE_LM))
- + return 1;
- +
- smram->smram64.svm_guest_flag = 1;
- smram->smram64.svm_guest_vmcb_gpa = svm->nested.vmcb12_gpa;
-
- --
- 2.38.1
|