KVM: VMX: Enforce EPT pagetable level checking
authorSheng Yang <sheng@linux.intel.com>
Wed, 2 Jun 2010 06:05:24 +0000 (14:05 +0800)
committerAvi Kivity <avi@redhat.com>
Sun, 1 Aug 2010 07:39:25 +0000 (10:39 +0300)
We only support 4 levels EPT pagetable now.

Signed-off-by: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/vmx.c

index 8c9085d44c373ba272649ccbf9342e67e6317d47..2201e38162059cec8e64adc14750b75cce390297 100644 (file)
@@ -340,6 +340,11 @@ static inline bool cpu_has_vmx_ept_1g_page(void)
        return vmx_capability.ept & VMX_EPT_1GB_PAGE_BIT;
 }
 
+static inline bool cpu_has_vmx_ept_4levels(void)
+{
+       return vmx_capability.ept & VMX_EPT_PAGE_WALK_4_BIT;
+}
+
 static inline bool cpu_has_vmx_invept_individual_addr(void)
 {
        return vmx_capability.ept & VMX_EPT_EXTENT_INDIVIDUAL_BIT;
@@ -1568,7 +1573,8 @@ static __init int hardware_setup(void)
        if (!cpu_has_vmx_vpid())
                enable_vpid = 0;
 
-       if (!cpu_has_vmx_ept()) {
+       if (!cpu_has_vmx_ept() ||
+           !cpu_has_vmx_ept_4levels()) {
                enable_ept = 0;
                enable_unrestricted_guest = 0;
        }