VirtualBox

Changeset 79015 in vbox for trunk


Ignore:
Timestamp:
Jun 6, 2019 7:05:58 AM (6 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 Access the VM-exit interruption info after reading it from the VMCS. Not all callers are doing this.

File:
1 edited

Legend:

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

    r78978 r79015  
    1284412844static VBOXSTRICTRC hmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)
    1284512845{
    12846     uint32_t const uExitVector = VMX_EXIT_INT_INFO_VECTOR(pVmxTransient->uExitIntInfo);
    12847 
    12848     int rc2 = hmR0VmxReadIdtVectoringInfoVmcs(pVmxTransient);
    12849     rc2    |= hmR0VmxReadExitIntInfoVmcs(pVmxTransient);
    12850     AssertRCReturn(rc2, rc2);
    12851 
    1285212846    VBOXSTRICTRC  rcStrict  = VINF_SUCCESS;
    1285312847    PCVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
     12848
     12849    /* Read the IDT vectoring info. and VM-exit interruption info. */
     12850    {
     12851        int rc = hmR0VmxReadIdtVectoringInfoVmcs(pVmxTransient);
     12852        rc    |= hmR0VmxReadExitIntInfoVmcs(pVmxTransient);
     12853        AssertRCReturn(rc, rc);
     12854    }
     12855
     12856    uint32_t const uExitVector = VMX_EXIT_INT_INFO_VECTOR(pVmxTransient->uExitIntInfo);
    1285412857    if (VMX_IDT_VECTORING_INFO_IS_VALID(pVmxTransient->uIdtVectoringInfo))
    1285512858    {
     
    1288012883            uint32_t const fIdtVectorFlags  = hmR0VmxGetIemXcptFlags(uIdtVector, uIdtVectorType);
    1288112884            uint32_t const fExitVectorFlags = hmR0VmxGetIemXcptFlags(uExitVector, uExitVectorType);
     12885
    1288212886            /** @todo Make AssertMsgReturn as just AssertMsg later. */
    1288312887            AssertMsgReturn(uExitVectorType == VMX_EXIT_INT_INFO_TYPE_HW_XCPT,
     
    1293912943                if (VMX_IDT_VECTORING_INFO_IS_ERROR_CODE_VALID(pVmxTransient->uIdtVectoringInfo))
    1294012944                {
    12941                     rc2 = hmR0VmxReadIdtVectoringErrorCodeVmcs(pVmxTransient);
    12942                     AssertRCReturn(rc2, rc2);
     12945                    int rc = hmR0VmxReadIdtVectoringErrorCodeVmcs(pVmxTransient);
     12946                    AssertRCReturn(rc, rc);
    1294312947                    u32ErrCode = pVmxTransient->uIdtVectoringErrorCode;
    1294412948                }
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