OSDN Git Service

KVM: VMX: Refuse to load kvm_intel if EPT and NX are disabled
authorSean Christopherson <seanjc@google.com>
Tue, 15 Jun 2021 16:45:32 +0000 (09:45 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 18 Jun 2021 10:24:49 +0000 (06:24 -0400)
Refuse to load KVM if NX support is not available and EPT is not enabled.
Shadow paging has assumed NX support since commit 9167ab799362 ("KVM:
vmx, svm: always run with EFER.NXE=1 when shadow paging is active"), so
for all intents and purposes this has been a de facto requirement for
over a year.

Do not require NX support if EPT is enabled purely because Intel CPUs let
firmware disable NX support via MSR_IA32_MISC_ENABLES.  If not for that,
VMX (and KVM as a whole) could require NX support with minimal risk to
breaking userspace.

Fixes: 9167ab799362 ("KVM: vmx, svm: always run with EFER.NXE=1 when shadow paging is active")
Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Jim Mattson <jmattson@google.com>
Message-Id: <20210615164535.2146172-2-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx/vmx.c

index 68a72c8..889e83f 100644 (file)
@@ -7723,6 +7723,12 @@ static __init int hardware_setup(void)
            !cpu_has_vmx_invept_global())
                enable_ept = 0;
 
+       /* NX support is required for shadow paging. */
+       if (!enable_ept && !boot_cpu_has(X86_FEATURE_NX)) {
+               pr_err_ratelimited("kvm: NX (Execute Disable) not supported\n");
+               return -EOPNOTSUPP;
+       }
+
        if (!cpu_has_vmx_ept_ad_bits() || !enable_ept)
                enable_ept_ad_bits = 0;