826eb0ff89
but allow discarding BTF information when loading modules, so that upgrades which are otherwise ABI compatible still work. this allows using BTF information when matching and available, while degrading gracefully if the currently running kernel is not identical to the one that module was built for. in case of a mismatch, the kernel will log a warning when loading the module, for example: Jan 30 13:57:58 test kernel: BPF: type_id=184 bits_offset=4096 Jan 30 13:57:58 test kernel: BPF: Jan 30 13:57:58 test kernel: BPF: Invalid name Jan 30 13:57:58 test kernel: BPF: Jan 30 13:57:58 test kernel: failed to validate module [bonding] BTF: -22 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
45 lines
1.5 KiB
Diff
45 lines
1.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Maxim Levitsky <mlevitsk@redhat.com>
|
|
Date: Wed, 3 Aug 2022 18:50:10 +0300
|
|
Subject: [PATCH] KVM: x86: SVM: don't save SVM state to SMRAM when VM is not
|
|
long mode capable
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
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 <mlevitsk@redhat.com>
|
|
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
|
|
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
|
|
---
|
|
arch/x86/kvm/svm/svm.c | 9 +++++++++
|
|
1 file changed, 9 insertions(+)
|
|
|
|
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
|
|
index bfacbef667d7..6b02f99fe70c 100644
|
|
--- a/arch/x86/kvm/svm/svm.c
|
|
+++ b/arch/x86/kvm/svm/svm.c
|
|
@@ -4394,6 +4394,15 @@ 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.
|
|
+ * SVM should not be enabled by the userspace without marking
|
|
+ * the CPU as at least long mode capable.
|
|
+ */
|
|
+
|
|
+ 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;
|
|
|