KVM: VMX: Don't toggle VM_ENTRY_IA32E_MODE for 32-bit kernels/KVM
authorSean Christopherson <seanjc@google.com>
Tue, 30 Aug 2022 13:37:26 +0000 (15:37 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 26 Sep 2022 16:02:53 +0000 (12:02 -0400)
Don't toggle VM_ENTRY_IA32E_MODE in 32-bit kernels/KVM and instead bug
the VM if KVM attempts to run the guest with EFER.LMA=1. KVM doesn't
support running 64-bit guests with 32-bit hosts.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Link: https://lore.kernel.org/r/20220830133737.1539624-23-vkuznets@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx/vmx.c

index 977edd4..45f53ee 100644 (file)
@@ -3039,10 +3039,15 @@ int vmx_set_efer(struct kvm_vcpu *vcpu, u64 efer)
                return 0;
 
        vcpu->arch.efer = efer;
+#ifdef CONFIG_X86_64
        if (efer & EFER_LMA)
                vm_entry_controls_setbit(vmx, VM_ENTRY_IA32E_MODE);
        else
                vm_entry_controls_clearbit(vmx, VM_ENTRY_IA32E_MODE);
+#else
+       if (KVM_BUG_ON(efer & EFER_LMA, vcpu->kvm))
+               return 1;
+#endif
 
        vmx_setup_uret_msrs(vmx);
        return 0;