0029-KVM-x86-SVM-don-t-save-SVM-state-to-SMRAM-when-VM-is.patch 1.3 KB

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