diff options
author | Jim Mattson <jmattson@google.com> | 2017-07-06 16:33:05 -0700 |
---|---|---|
committer | Radim Krčmář <rkrcmar@redhat.com> | 2017-07-12 18:41:10 +0200 |
commit | 7cdc2d62f9cce8a02eb2a5fbfca6813f04189487 (patch) | |
tree | b1c982322d705fe9fad56a85e069199d5b4dc8d1 /arch/x86 | |
parent | 8c61af9ebc016180507b246c875217e188be6eca (diff) | |
download | blackbird-op-linux-7cdc2d62f9cce8a02eb2a5fbfca6813f04189487.tar.gz blackbird-op-linux-7cdc2d62f9cce8a02eb2a5fbfca6813f04189487.zip |
kvm: nVMX: Don't set vmcs12 to "launched" when VMLAUNCH fails
The VMCS launch state is not set to "launched" unless the VMLAUNCH
actually succeeds. VMLAUNCH failure includes VM-exits with bit 31 set.
Note that this change does not address the general problem that a
failure to launch/resume vmcs02 (i.e. vmx->fail) is not handled
correctly.
Signed-off-by: Jim Mattson <jmattson@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kvm/vmx.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 7592a18ecc1c..ef978d5983ae 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -10435,8 +10435,6 @@ static int enter_vmx_non_root_mode(struct kvm_vcpu *vcpu, bool from_vmentry) return 1; } - vmcs12->launch_state = 1; - /* * Note no nested_vmx_succeed or nested_vmx_fail here. At this point * we are no longer running L1, and VMLAUNCH/VMRESUME has not yet @@ -10810,6 +10808,8 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12, vmcs12->vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO); if (!(vmcs12->vm_exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY)) { + vmcs12->launch_state = 1; + /* vm_entry_intr_info_field is cleared on exit. Emulate this * instead of reading the real value. */ vmcs12->vm_entry_intr_info_field &= ~INTR_INFO_VALID_MASK; |