@@ -149,6 +149,22 @@ static bool test_vmxon_correct(void)
return handle_vmxinsn_err(__func__, ret, fault, VMXERR_NOERR, 0, 0);
}
+/**
+ * vmxon in VMX root w/ CPL = 0 and w/o current VMCS
+ *
+ * Expect: VMfailInvalid
+ */
+static bool test_vmxon_in_root_cpl0_novmcs(void)
+{
+ clear_vmcs(vmxon_region_2nd, get_vmcs_revid());
+
+ exinfo_t fault;
+ uint8_t ret = vmxon((uint64_t)vmxon_region_2nd, &fault);
+
+ return handle_vmxinsn_err(__func__, ret, fault,
+ VMXERR_VMFAIL_INVALID, 0, 0);
+}
+
bool test_vmxon(void)
{
if ( !test_vmxon_novmxe() )
@@ -175,6 +191,9 @@ bool test_vmxon(void)
if ( !test_vmxon_correct() )
return false;
+ if ( !test_vmxon_in_root_cpl0_novmcs() )
+ return false;
+
return true;
}
VMfailInvalid is expected in this test. Signed-off-by: Haozhong Zhang <haozhong.zhang@intel.com> --- tests/vvmx/vmxon.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)