Skip to contentSkip to conversation

x86: VMX: Mask advanced VM-exit info

PATCH Applied Nadav Amit 2 participants 2 messages Oct 3, 2019 – Oct 7, 2019 KVM

lore
Share & tools
lore

Nadav Amit

author
#0 lore raw

PATCH 1/1 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.

---
 x86/vmx.h       | 2 ++
 x86/vmx_tests.c | 7 +++++++
 2 files changed, 9 insertions(+)
x86/vmx.h +2 -0
index a8bc847..8496be7 100644
@@ -618,6 +618,8 @@ enum vm_instruction_error_number {
 #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
x86/vmx_tests.c +7 -0
index f4b348b..6b9dc10 100644
@@ -1409,6 +1409,13 @@ static int ept_exit_handler_common(bool have_ad)
 		}
 		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,
Signature · 1 line
2.17.1
maintainer Applied
#1 lore raw
Quoted 38 lines · Nadav Amit

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.

---
 x86/vmx.h       | 2 ++
 x86/vmx_tests.c | 7 +++++++
 2 files changed, 9 insertions(+)
x86/vmx.h +2 -0
index a8bc847..8496be7 100644
@@ -618,6 +618,8 @@ enum vm_instruction_error_number {
 #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
x86/vmx_tests.c +0 -0
index f4b348b..6b9dc10 100644
@@ -1409,6 +1409,13 @@ static int ept_exit_handler_common(bool have_ad)
 		}
 		return VMX_TEST_RESUME;
 	case VMX_EPT_VIOLATION:

x86/vmx_tests.c static int ept_exit_handler_common(bool have_ad) · line 1421

Quoted 10 lines
x86/vmx_tests.c +7 -0
+		/*
+		 * 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,

Queued, thanks.

Paolo