VirtualBox

Changeset 72563 in vbox for trunk


Ignore:
Timestamp:
Jun 15, 2018 12:54:32 PM (7 years ago)
Author:
vboxsync
Message:

IEM: Fixed bug in three IEMExecDecodedXxx methods where they wouldn't roll back memory buffers on return.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r72513 r72563  
    1445414454    }
    1445514455
     14456    if (pVCpu->iem.s.cActiveMappings)
     14457        iemMemRollback(pVCpu);
     14458
    1445614459    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1445714460}
     
    1457314576    }
    1457414577
     14578    if (pVCpu->iem.s.cActiveMappings)
     14579        iemMemRollback(pVCpu);
     14580
    1457514581    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1457614582}
     
    1459514601    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1459614602    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_2(iemCImpl_out, u16Port, cbReg);
     14603    Assert(!pVCpu->iem.s.cActiveMappings);
    1459714604    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1459814605}
     
    1461514622    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1461614623    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_2(iemCImpl_in, u16Port, cbReg);
     14624    Assert(!pVCpu->iem.s.cActiveMappings);
    1461714625    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1461814626}
     
    1463814646    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1463914647    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_2(iemCImpl_mov_Cd_Rd, iCrReg, iGReg);
     14648    Assert(!pVCpu->iem.s.cActiveMappings);
    1464014649    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1464114650}
     
    1466114670    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1466214671    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_2(iemCImpl_mov_Rd_Cd, iGReg, iCrReg);
     14672    Assert(!pVCpu->iem.s.cActiveMappings);
    1466314673    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1466414674}
     
    1468014690    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1468114691    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_clts);
     14692    Assert(!pVCpu->iem.s.cActiveMappings);
    1468214693    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1468314694}
     
    1470014711    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1470114712    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_1(iemCImpl_lmsw, uValue);
     14713    Assert(!pVCpu->iem.s.cActiveMappings);
    1470214714    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1470314715}
     
    1472114733    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1472214734    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_xsetbv);
     14735    Assert(!pVCpu->iem.s.cActiveMappings);
    1472314736    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1472414737}
     
    1474014753    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1474114754    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_1(iemCImpl_invlpg, GCPtrPage);
     14755    Assert(!pVCpu->iem.s.cActiveMappings);
    1474214756    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1474314757}
     
    1476014774    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1476114775    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_2(iemCImpl_invpcid, uType, GCPtrInvpcidDesc);
     14776    Assert(!pVCpu->iem.s.cActiveMappings);
    1476214777    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1476314778}
     
    1481514830    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1481614831    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_clgi);
     14832    Assert(!pVCpu->iem.s.cActiveMappings);
    1481714833    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1481814834}
     
    1483314849    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1483414850    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_stgi);
     14851    Assert(!pVCpu->iem.s.cActiveMappings);
    1483514852    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1483614853}
     
    1485114868    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1485214869    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_vmload);
     14870    Assert(!pVCpu->iem.s.cActiveMappings);
    1485314871    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1485414872}
     
    1486914887    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1487014888    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_vmsave);
     14889    Assert(!pVCpu->iem.s.cActiveMappings);
    1487114890    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1487214891}
     
    1488714906    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1488814907    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_invlpga);
     14908    Assert(!pVCpu->iem.s.cActiveMappings);
    1488914909    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1489014910}
     
    1490514925    iemInitExec(pVCpu, false /*fBypassHandlers*/);
    1490614926    VBOXSTRICTRC rcStrict = IEM_CIMPL_CALL_0(iemCImpl_vmrun);
     14927    Assert(!pVCpu->iem.s.cActiveMappings);
    1490714928    return iemUninitExecAndFiddleStatusAndMaybeReenter(pVCpu, rcStrict);
    1490814929}
     
    1492314944    IEM_CTX_ASSERT(pVCpu, IEM_CPUMCTX_EXTRN_MUST_MASK);
    1492414945    VBOXSTRICTRC rcStrict = iemSvmVmexit(pVCpu, uExitCode, uExitInfo1, uExitInfo2);
     14946    if (pVCpu->iem.s.cActiveMappings)
     14947        iemMemRollback(pVCpu);
    1492514948    return iemExecStatusCodeFiddling(pVCpu, rcStrict);
    1492614949}
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