VirtualBox

Changeset 99651 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
May 8, 2023 7:04:05 AM (21 months ago)
Author:
vboxsync
Message:

VMM/IEM: Nested VMX: bugref:10318 Clear "NMI unblocked due to IRET" state on completion of IRET emulation.

File:
1 edited

Legend:

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

    r99220 r99651  
    39783978     * Call a mode specific worker.
    39793979     */
     3980    VBOXSTRICTRC rcStrict;
    39803981    if (IEM_IS_REAL_OR_V86_MODE(pVCpu))
    3981         return IEM_CIMPL_CALL_1(iemCImpl_iret_real_v8086, enmEffOpSize);
    3982     IEM_CTX_IMPORT_RET(pVCpu, CPUMCTX_EXTRN_SREG_MASK | CPUMCTX_EXTRN_GDTR | CPUMCTX_EXTRN_LDTR);
    3983     if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT)
    3984         return IEM_CIMPL_CALL_1(iemCImpl_iret_64bit, enmEffOpSize);
    3985     return     IEM_CIMPL_CALL_1(iemCImpl_iret_prot, enmEffOpSize);
     3982        rcStrict = IEM_CIMPL_CALL_1(iemCImpl_iret_real_v8086, enmEffOpSize);
     3983    else
     3984    {
     3985        IEM_CTX_IMPORT_RET(pVCpu, CPUMCTX_EXTRN_SREG_MASK | CPUMCTX_EXTRN_GDTR | CPUMCTX_EXTRN_LDTR);
     3986        if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT)
     3987            rcStrict = IEM_CIMPL_CALL_1(iemCImpl_iret_64bit, enmEffOpSize);
     3988        else
     3989            rcStrict = IEM_CIMPL_CALL_1(iemCImpl_iret_prot, enmEffOpSize);
     3990    }
     3991
     3992#ifdef VBOX_WITH_NESTED_HWVIRT_VMX
     3993    /*
     3994     * Clear NMI unblocking IRET state with the completion of IRET.
     3995     */
     3996    if (IEM_VMX_IS_NON_ROOT_MODE(pVCpu))
     3997        pVCpu->cpum.GstCtx.hwvirt.vmx.fNmiUnblockingIret = false;
     3998#endif
     3999    return rcStrict;
    39864000}
    39874001
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