x86: VMX: Mask advanced VM-exit info
Bits [9:11] are undefined in the VM-exit qualification when "advanced
VM-exit information for EPT violations" is not supported.
Mask these bits for now to avoid false failures. If KVM supports this
feature, the tests would need to be adapted, and the masking would need
to be removed.
Unfortunately, I do not have hardware that supports this feature
available for my use to make a better fix.
Signed-off-by: Nadav Amit <namit@vmware.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/x86/vmx.h b/x86/vmx.h
index a8bc847..8496be7 100644
--- a/x86/vmx.h
+++ b/x86/vmx.h
@@ -618,6 +618,8 @@
#define EPT_VLT_GUEST_USER (1ull << 9)
#define EPT_VLT_GUEST_RW (1ull << 10)
#define EPT_VLT_GUEST_EX (1ull << 11)
+#define EPT_VLT_GUEST_MASK (EPT_VLT_GUEST_USER | EPT_VLT_GUEST_RW | \
+ EPT_VLT_GUEST_EX)
#define MAGIC_VAL_1 0x12345678ul
#define MAGIC_VAL_2 0x87654321ul
diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
index d2a55cd..1d8932f 100644
--- a/x86/vmx_tests.c
+++ b/x86/vmx_tests.c
@@ -1409,6 +1409,13 @@
}
return VMX_TEST_RESUME;
case VMX_EPT_VIOLATION:
+ /*
+ * Exit-qualifications are masked not to account for advanced
+ * VM-exit information. Once KVM supports this feature, this
+ * masking should be removed.
+ */
+ exit_qual &= ~EPT_VLT_GUEST_MASK;
+
switch(vmx_get_test_stage()) {
case 3:
check_ept_ad(pml4, guest_cr3, (unsigned long)data_page1, 0,