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
 	 */