VirtualBox

Changeset 78835 in vbox


Ignore:
Timestamp:
May 29, 2019 6:10:57 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
130935
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 GDTR, IDTR and LDTR_TR accesses are never intercepted and VM-exits are unexpected.

File:
1 edited

Legend:

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

    r78834 r78835  
    396396static FNVMXEXITHANDLERNSRC        hmR0VmxExitTprBelowThreshold;
    397397static FNVMXEXITHANDLER            hmR0VmxExitApicAccess;
    398 static FNVMXEXITHANDLER            hmR0VmxExitXdtrAccess;
    399398static FNVMXEXITHANDLER            hmR0VmxExitEptViolation;
    400399static FNVMXEXITHANDLER            hmR0VmxExitEptMisconfig;
     
    602601    /* 44  VMX_EXIT_APIC_ACCESS             */  hmR0VmxExitApicAccess,
    603602    /* 45  VMX_EXIT_VIRTUALIZED_EOI         */  hmR0VmxExitErrUnexpected,
    604     /* 46  VMX_EXIT_GDTR_IDTR_ACCESS        */  hmR0VmxExitXdtrAccess,
    605     /* 47  VMX_EXIT_LDTR_TR_ACCESS          */  hmR0VmxExitXdtrAccess,
     603    /* 46  VMX_EXIT_GDTR_IDTR_ACCESS        */  hmR0VmxExitErrUnexpected,
     604    /* 47  VMX_EXIT_LDTR_TR_ACCESS          */  hmR0VmxExitErrUnexpected,
    606605    /* 48  VMX_EXIT_EPT_VIOLATION           */  hmR0VmxExitEptViolation,
    607606    /* 49  VMX_EXIT_EPT_MISCONFIG           */  hmR0VmxExitEptMisconfig,
     
    1253412533        case VMX_EXIT_MTF:                     VMEXIT_CALL_RET(0, hmR0VmxExitMtf(pVCpu, pVmxTransient));
    1253512534        case VMX_EXIT_PAUSE:                   VMEXIT_CALL_RET(0, hmR0VmxExitPause(pVCpu, pVmxTransient));
    12536         case VMX_EXIT_GDTR_IDTR_ACCESS:        VMEXIT_CALL_RET(0, hmR0VmxExitXdtrAccess(pVCpu, pVmxTransient));
    12537         case VMX_EXIT_LDTR_TR_ACCESS:          VMEXIT_CALL_RET(0, hmR0VmxExitXdtrAccess(pVCpu, pVmxTransient));
    1253812535        case VMX_EXIT_WBINVD:                  VMEXIT_CALL_RET(0, hmR0VmxExitWbinvd(pVCpu, pVmxTransient));
    1253912536        case VMX_EXIT_XSETBV:                  VMEXIT_CALL_RET(0, hmR0VmxExitXsetbv(pVCpu, pVmxTransient));
     
    1258012577        case VMX_EXIT_PML_FULL:
    1258112578        case VMX_EXIT_VIRTUALIZED_EOI:
     12579        case VMX_EXIT_GDTR_IDTR_ACCESS:
     12580        case VMX_EXIT_LDTR_TR_ACCESS:
    1258212581        case VMX_EXIT_APIC_WRITE:
    1258312582        case VMX_EXIT_RDRAND:
     
    1376713766     *    VM-exits.
    1376813767     *
     13768     * VMX_EXIT_GDTR_IDTR_ACCESS:
     13769     * VMX_EXIT_LDTR_TR_ACCESS:
    1376913770     * VMX_EXIT_RDRAND:
    1377013771     * VMX_EXIT_RSM:
     
    1378413785    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    1378513786    AssertMsgFailed(("Unexpected VM-exit %u\n", pVmxTransient->uExitReason));
    13786     HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient->uExitReason);
    13787 }
    13788 
    13789 
    13790 /**
    13791  * VM-exit handler for XDTR (LGDT, SGDT, LIDT, SIDT) accesses
    13792  * (VMX_EXIT_GDTR_IDTR_ACCESS) and LDT and TR access (LLDT, LTR, SLDT, STR).
    13793  * Conditional VM-exit.
    13794  */
    13795 HMVMX_EXIT_DECL hmR0VmxExitXdtrAccess(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)
    13796 {
    13797     HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    13798 
    13799     /* By default, we don't enable VMX_PROC_CTLS2_DESCRIPTOR_TABLE_EXIT. */
    13800     STAM_COUNTER_INC(&pVCpu->hm.s.StatExitXdtrAccess);
    13801     PCVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
    13802     if (pVmcsInfo->u32ProcCtls2 & VMX_PROC_CTLS2_DESC_TABLE_EXIT)
    13803         return VERR_EM_INTERPRETER;
    13804     AssertMsgFailed(("Unexpected XDTR access\n"));
    1380513787    HMVMX_UNEXPECTED_EXIT_RET(pVCpu, pVmxTransient->uExitReason);
    1380613788}
     
    1624816230        return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo);
    1624916231    }
    16250     return hmR0VmxExitXdtrAccess(pVCpu, pVmxTransient);
     16232    return hmR0VmxExitErrUnexpected(pVCpu, pVmxTransient);
    1625116233}
    1625216234
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