kvm-unit-tests: nVMX: Test GUEST_LIMIT_GDTR and GUEST_LIMIT_IDTR on vmentry of nested guests
According to section "Checks on Guest Descriptor-Table Registers" in Intel
SDM vol 3C, the following checks are performed on the Guest Descriptor-Table
Registers on vmentry of nested guests:
- Bits 31:16 of each limit field must be 0.
Signed-off-by: Krish Sadhukhan <krish.sadhukhan@oracle.com>
Message-Id: <20200523002603.32450-4-krish.sadhukhan@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
index aec32fc..9ed43ee 100644
--- a/x86/vmx_tests.c
+++ b/x86/vmx_tests.c
@@ -7840,6 +7840,23 @@
test_canonical(GUEST_BASE_IDTR, "GUEST_BASE_IDTR", false);
#endif
+ u32 guest_desc_limit_saved = vmcs_read(GUEST_LIMIT_GDTR);
+ int i;
+ for (i = 16; i <= 31; i++) {
+ u32 tmp = guest_desc_limit_saved | (1ull << i);
+ vmcs_write(GUEST_LIMIT_GDTR, tmp);
+ test_guest_state("GUEST_LIMIT_GDTR", true, tmp, "GUEST_LIMIT_GDTR");
+ }
+ vmcs_write(GUEST_LIMIT_GDTR, guest_desc_limit_saved);
+
+ guest_desc_limit_saved = vmcs_read(GUEST_LIMIT_IDTR);
+ for (i = 16; i <= 31; i++) {
+ u32 tmp = guest_desc_limit_saved | (1ull << i);
+ vmcs_write(GUEST_LIMIT_IDTR, tmp);
+ test_guest_state("GUEST_LIMIT_IDTR", true, tmp, "GUEST_LIMIT_IDTR");
+ }
+ vmcs_write(GUEST_LIMIT_IDTR, guest_desc_limit_saved);
+
/*
* Let the guest finish execution
*/