The current tests for guest state do not yet check the validity of loaded state from within the nested VM. Introduce the load_state_test_data struct to share data with the nested VM. Signed-off-by: Oliver Upton <oupton@xxxxxxxxxx> --- x86/vmx_tests.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c index 6f46c7759c85..84e1a7935aa1 100644 --- a/x86/vmx_tests.c +++ b/x86/vmx_tests.c @@ -5017,13 +5017,28 @@ static void test_entry_msr_load(void) test_vmx_valid_controls(false); } +static struct vmx_state_area_test_data { + u32 msr; + u64 exp; + bool enabled; +} vmx_state_area_test_data; + static void guest_state_test_main(void) { + u64 obs; + struct vmx_state_area_test_data *data = &vmx_state_area_test_data; + while (1) { - if (vmx_get_test_stage() != 2) - vmcall(); - else + if (vmx_get_test_stage() == 2) break; + + if (data->enabled) { + obs = rdmsr(data->msr); + report("Guest state is 0x%lx (expected 0x%lx)", + data->exp == obs, obs, data->exp); + } + + vmcall(); } asm volatile("fnop"); @@ -6854,7 +6869,9 @@ static void test_pat(u32 field, const char * field_name, u32 ctrl_field, u64 i, val; u32 j; int error; + struct vmx_state_area_test_data *data = &vmx_state_area_test_data; + data->enabled = false; vmcs_clear_bits(ctrl_field, ctrl_bit); if (field == GUEST_PAT) { vmx_set_test_stage(1); -- 2.23.0.187.g17f5b7556c-goog