selftests: kvm: do not set guest mode flag
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 27 Jul 2020 12:45:00 +0000 (08:45 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 27 Jul 2020 13:04:48 +0000 (09:04 -0400)
Setting KVM_STATE_NESTED_GUEST_MODE enables various consistency checks
on VMCS12 and therefore causes KVM_SET_NESTED_STATE to fail spuriously
with -EINVAL.  Do not set the flag so that we're sure to cover the
conditions included by the test, and cover the case where VMCS12 is
set and KVM_SET_NESTED_STATE is called with invalid VMCS12 contents.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test.c

index 54cdefdfb49de2bb11f3e814a527cf4d0aa5dbba..d14a34f1b0184aade4cdf164774a9ed2b7f2ec75 100644 (file)
@@ -76,10 +76,8 @@ void set_default_state(struct kvm_nested_state *state)
 void set_default_vmx_state(struct kvm_nested_state *state, int size)
 {
        memset(state, 0, size);
-       state->flags = KVM_STATE_NESTED_GUEST_MODE  |
-                       KVM_STATE_NESTED_RUN_PENDING;
        if (have_evmcs)
-               state->flags |= KVM_STATE_NESTED_EVMCS;
+               state->flags = KVM_STATE_NESTED_EVMCS;
        state->format = 0;
        state->size = size;
        state->hdr.vmx.vmxon_pa = 0x1000;
@@ -190,17 +188,20 @@ void test_vmx_nested_state(struct kvm_vm *vm)
        state->size = sizeof(*state);
        test_nested_state(vm, state);
 
+       /*
+        * KVM_SET_NESTED_STATE succeeds with invalid VMCS
+        * contents but L2 not running.
+        */
+       set_default_vmx_state(state, state_sz);
+       state->flags = 0;
+       test_nested_state(vm, state);
+
        /* vmxon_pa cannot be the same address as vmcs_pa. */
        set_default_vmx_state(state, state_sz);
        state->hdr.vmx.vmxon_pa = 0;
        state->hdr.vmx.vmcs12_pa = 0;
        test_nested_state_expect_einval(vm, state);
 
-       /* The revision id for vmcs12 must be VMCS12_REVISION. */
-       set_default_vmx_state(state, state_sz);
-       set_revision_id_for_vmcs12(state, 0);
-       test_nested_state_expect_einval(vm, state);
-
        /*
         * Test that if we leave nesting the state reflects that when we get
         * it again.