VirtualBox

Changeset 13516 in vbox for trunk/src


Ignore:
Timestamp:
Oct 23, 2008 8:15:56 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
38352
Message:

Protection against touching VT-x/AMD-V after the suspend signal has been sent.

File:
1 edited

Legend:

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

    r13514 r13516  
    129129
    130130    HWACCMSTATE     enmHwAccmState;
     131
     132    bool            fSuspended;
    131133} HWACCMR0Globals;
    132134
     
    526528{
    527529    Assert(sizeof(HWACCMR0Globals.enmHwAccmState) == sizeof(uint32_t));
     530
     531    /* Make sure we don't touch hwaccm after we've disabled hwaccm in preparation of a suspend. */
     532    if (HWACCMR0Globals.fSuspended)
     533        return VERR_HWACCM_SUSPEND_PENDING;
     534
    528535    if (ASMAtomicCmpXchgU32((volatile uint32_t *)&HWACCMR0Globals.enmHwAccmState, enmNewHwAccmState, HWACCMSTATE_UNINITIALIZED))
    529536    {
     
    677684        SUPR0Printf("hwaccmR0PowerCallback RTPOWEREVENT_RESUME\n");
    678685#endif
     686
     687    if (enmEvent == RTPOWEREVENT_SUSPEND)
     688        HWACCMR0Globals.fSuspended = true;
    679689
    680690    if (HWACCMR0Globals.enmHwAccmState == HWACCMSTATE_ENABLED)
     
    709719        }
    710720    }
     721    if (enmEvent == RTPOWEREVENT_RESUME)
     722        HWACCMR0Globals.fSuspended = false;
    711723}
    712724
     
    728740    SUPR0Printf("HWACCMR0InitVM: %p\n", pVM);
    729741#endif
     742
     743    /* Make sure we don't touch hwaccm after we've disabled hwaccm in preparation of a suspend. */
     744    if (HWACCMR0Globals.fSuspended)
     745        return VERR_HWACCM_SUSPEND_PENDING;
    730746
    731747    pVM->hwaccm.s.vmx.fSupported            = HWACCMR0Globals.vmx.fSupported;
     
    783799#endif
    784800
     801    /* Make sure we don't touch hwaccm after we've disabled hwaccm in preparation of a suspend. */
     802    if (HWACCMR0Globals.fSuspended)
     803        return VERR_HWACCM_SUSPEND_PENDING;
     804
    785805    /* Terminate a VT-x or AMD-V VM. */
    786806    return HWACCMR0Globals.pfnTermVM(pVM);
     
    797817{
    798818    AssertReturn(pVM, VERR_INVALID_PARAMETER);
     819
     820    /* Make sure we don't touch hwaccm after we've disabled hwaccm in preparation of a suspend. */
     821    if (HWACCMR0Globals.fSuspended)
     822        return VERR_HWACCM_SUSPEND_PENDING;
    799823
    800824#ifdef LOG_ENABLED
     
    818842    int      rc;
    819843    RTCPUID  idCpu = RTMpCpuId();
     844
     845    /* Make sure we can't enter a session after we've disabled hwaccm in preparation of a suspend. */
     846    if (HWACCMR0Globals.fSuspended)
     847        return VINF_EM_RAW_INTERRUPT;
    820848
    821849    rc = CPUMQueryGuestCtxPtr(pVM, &pCtx);
     
    869897    int      rc;
    870898
     899    AssertReturn(!HWACCMR0Globals.fSuspended, VERR_HWACCM_SUSPEND_PENDING);
     900
    871901    rc = CPUMQueryGuestCtxPtr(pVM, &pCtx);
    872902    if (VBOX_FAILURE(rc))
     
    912942    Assert(!VM_FF_ISPENDING(pVM, VM_FF_PGM_SYNC_CR3 | VM_FF_PGM_SYNC_CR3_NON_GLOBAL));
    913943    Assert(HWACCMR0Globals.aCpuInfo[idCpu].fConfigured);
     944    AssertReturn(!HWACCMR0Globals.fSuspended, VERR_HWACCM_SUSPEND_PENDING);
    914945
    915946    rc = CPUMQueryGuestCtxPtr(pVM, &pCtx);
Note: See TracChangeset for help on using the changeset viewer.

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