mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
KVM: nVMX: Leave most VM-Exit info fields unmodified on failed VM-Entry
Don't modify vmcs12 exit fields except EXIT_REASON and EXIT_QUALIFICATION
when performing a nested VM-Exit due to failed VM-Entry. Per the SDM,
only the two aformentioned fields are filled and "All other VM-exit
information fields are unmodified".
Fixes: 4704d0befb
("KVM: nVMX: Exiting from L2 to L1")
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20220407002315.78092-3-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
45846661d1
commit
c3634d25fb
1 changed files with 10 additions and 5 deletions
|
@ -4202,12 +4202,12 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
|
|||
if (to_vmx(vcpu)->exit_reason.enclave_mode)
|
||||
vmcs12->vm_exit_reason |= VMX_EXIT_REASONS_SGX_ENCLAVE_MODE;
|
||||
vmcs12->exit_qualification = exit_qualification;
|
||||
vmcs12->vm_exit_intr_info = exit_intr_info;
|
||||
|
||||
vmcs12->idt_vectoring_info_field = 0;
|
||||
vmcs12->vm_exit_instruction_len = vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
|
||||
vmcs12->vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO);
|
||||
|
||||
/*
|
||||
* On VM-Exit due to a failed VM-Entry, the VMCS isn't marked launched
|
||||
* and only EXIT_REASON and EXIT_QUALIFICATION are updated, all other
|
||||
* exit info fields are unmodified.
|
||||
*/
|
||||
if (!(vmcs12->vm_exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY)) {
|
||||
vmcs12->launch_state = 1;
|
||||
|
||||
|
@ -4219,8 +4219,13 @@ static void prepare_vmcs12(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
|
|||
* Transfer the event that L0 or L1 may wanted to inject into
|
||||
* L2 to IDT_VECTORING_INFO_FIELD.
|
||||
*/
|
||||
vmcs12->idt_vectoring_info_field = 0;
|
||||
vmcs12_save_pending_event(vcpu, vmcs12);
|
||||
|
||||
vmcs12->vm_exit_intr_info = exit_intr_info;
|
||||
vmcs12->vm_exit_instruction_len = vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
|
||||
vmcs12->vmx_instruction_info = vmcs_read32(VMX_INSTRUCTION_INFO);
|
||||
|
||||
/*
|
||||
* According to spec, there's no need to store the guest's
|
||||
* MSRs if the exit is due to a VM-entry failure that occurs
|
||||
|
|
Loading…
Reference in a new issue