VirtualBox

Changeset 79721 in vbox


Ignore:
Timestamp:
Jul 12, 2019 8:35:44 AM (5 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 More IDT-vectoring madness.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r79719 r79721  
    1698816988        case VMX_EXIT_INT_INFO_TYPE_NMI:
    1698916989        {
    16990             Assert(!pVCpu->hm.s.Event.fPending);  /* NMIs cannot be caused during delivery on another event. */
     16990            Assert(!pVCpu->hm.s.Event.fPending);  /* An NMI cannot be caused by the delivery on another event. */
    1699116991            return hmR0VmxExitHostNmi(pVCpu, pVmxTransient->pVmcsInfo);
    1699216992        }
     
    1703917039                if (pVCpu->hm.s.Event.fPending)
    1704017040                {
    17041                     Assert(ExitEventInfo.uIdtVectoringInfo    == pVCpu->hm.s.Event.u64IntInfo);
     17041                    Assert(ExitEventInfo.uIdtVectoringInfo == pVCpu->hm.s.Event.u64IntInfo);
    1704217042                    if (VMX_IDT_VECTORING_INFO_IS_ERROR_CODE_VALID(ExitEventInfo.uIdtVectoringInfo))
    1704317043                        Assert(ExitEventInfo.uIdtVectoringErrCode == pVCpu->hm.s.Event.u32ErrCode);
     
    1705717057            /*
    1705817058             * If the guest hypervisor is not intercepting an exception that caused a VM-exit directly,
    17059              * forward it to the guest (for e.g, an instruction raises a #GP that causes a VM-exit but
    17060              * the guest hypervisor is not intercept #GPs, inject #GP into the guest).
     17059             * forward it to the guest (for e.g, an instruction raises a #GP that causes this VM-exit
     17060             * despite the guest hypervisor not intercept #GPs, inject #GP into the nested-guest).
     17061             *
     17062             * If the guest hypervisor is not intercepting an exception that caused a VM-exit indirectly,
     17063             * inject the secondary exception into the nested-guest (for e.g, an instruction raises a #GP,
     17064             * delivery of which causes an #AC. We get a #AC VM-exit but the guest-hypervisor is not
     17065             * intercepting #AC, then inject the #AC into the nested-guest rather than the original #GP).
    1706117066             */
    17062             if (!pVCpu->hm.s.Event.fPending)
    17063             {
    17064                 hmR0VmxSetPendingEvent(pVCpu, VMX_ENTRY_INT_INFO_FROM_EXIT_INT_INFO(uExitIntInfo), pVmxTransient->cbInstr,
    17065                                        pVmxTransient->uExitIntErrorCode, pVmxTransient->uExitQual);
    17066             }
     17067            pVCpu->hm.s.Event.fPending = false;
     17068            hmR0VmxSetPendingEvent(pVCpu, VMX_ENTRY_INT_INFO_FROM_EXIT_INT_INFO(uExitIntInfo), pVmxTransient->cbInstr,
     17069                                   pVmxTransient->uExitIntErrorCode, pVmxTransient->uExitQual);
    1706717070            return VINF_SUCCESS;
    1706817071        }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette