VirtualBox

Changeset 79458 in vbox


Ignore:
Timestamp:
Jul 2, 2019 4:45:02 AM (6 years ago)
Author:
vboxsync
Message:

VMM/HMVMXR0: Nested VMX: bugref:9180 Log whether it's a nested-guest VMCS or not while asserting controls in hmR0VmxCheckVmcsCtls.

File:
1 edited

Legend:

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

    r79455 r79458  
    25652565 *                                            VMCS content. HMCPU error-field is
    25662566 *                                            updated, see VMX_VCI_XXX.
    2567  * @param   pVCpu       The cross context virtual CPU structure.
    2568  * @param   pVmcsInfo   The VMCS info. object.
    2569  */
    2570 static int hmR0VmxCheckVmcsCtls(PVMCPU pVCpu, PCVMXVMCSINFO pVmcsInfo)
    2571 {
     2567 * @param   pVCpu           The cross context virtual CPU structure.
     2568 * @param   pVmcsInfo       The VMCS info. object.
     2569 * @param   fIsNstGstVmcs   Whether this is a nested-guest VMCS.
     2570 */
     2571static int hmR0VmxCheckVmcsCtls(PVMCPU pVCpu, PCVMXVMCSINFO pVmcsInfo, bool fIsNstGstVmcs)
     2572{
     2573    const char * const pcszVmcs = fIsNstGstVmcs ? "Nested-guest VMCS" : "VMCS";
     2574
    25722575    uint32_t u32Val;
    25732576    int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY, &u32Val);
    25742577    AssertRCReturn(rc, rc);
    25752578    AssertMsgReturnStmt(pVmcsInfo->u32EntryCtls == u32Val,
    2576                         ("Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32EntryCtls, u32Val),
     2579                        ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32EntryCtls, u32Val),
    25772580                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_ENTRY,
    25782581                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    25812584    AssertRCReturn(rc, rc);
    25822585    AssertMsgReturnStmt(pVmcsInfo->u32ExitCtls == u32Val,
    2583                         ("Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32ExitCtls, u32Val),
     2586                        ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32ExitCtls, u32Val),
    25842587                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_EXIT,
    25852588                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    25882591    AssertRCReturn(rc, rc);
    25892592    AssertMsgReturnStmt(pVmcsInfo->u32PinCtls == u32Val,
    2590                         ("Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32PinCtls, u32Val),
     2593                        ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32PinCtls, u32Val),
    25912594                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PIN_EXEC,
    25922595                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    25952598    AssertRCReturn(rc, rc);
    25962599    AssertMsgReturnStmt(pVmcsInfo->u32ProcCtls == u32Val,
    2597                         ("Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32ProcCtls, u32Val),
     2600                        ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32ProcCtls, u32Val),
    25982601                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PROC_EXEC,
    25992602                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    26042607        AssertRCReturn(rc, rc);
    26052608        AssertMsgReturnStmt(pVmcsInfo->u32ProcCtls2 == u32Val,
    2606                             ("Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32ProcCtls2, u32Val),
     2609                            ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32ProcCtls2, u32Val),
    26072610                            pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PROC_EXEC2,
    26082611                            VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    26122615    AssertRCReturn(rc, rc);
    26132616    AssertMsgReturnStmt(pVmcsInfo->u32XcptBitmap == u32Val,
    2614                         ("Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32XcptBitmap, u32Val),
     2617                        ("%s exception bitmap mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32XcptBitmap, u32Val),
    26152618                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_XCPT_BITMAP,
    26162619                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    26202623    AssertRCReturn(rc, rc);
    26212624    AssertMsgReturnStmt(pVmcsInfo->u64TscOffset == u64Val,
    2622                         ("Cache=%#RX64 VMCS=%#RX64\n", pVmcsInfo->u64TscOffset, u64Val),
     2625                        ("%s TSC offset mismatch: Cache=%#RX64 VMCS=%#RX64\n", pcszVmcs, pVmcsInfo->u64TscOffset, u64Val),
    26232626                        pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_TSC_OFFSET,
    26242627                        VERR_VMX_VMCS_FIELD_CACHE_INVALID);
     
    1172211725    hmR0VmxCheckAutoLoadStoreMsrs(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest);
    1172311726    hmR0VmxCheckHostEferMsr(pVCpu, pVmcsInfo);
    11724     AssertRC(hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo));
     11727    AssertRC(hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest));
    1172511728#endif
    1172611729
     
    1464914652    AssertRCReturn(rc, rc);
    1465014653
    14651     rc = hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo);
     14654    rc = hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest);
    1465214655    if (RT_FAILURE(rc))
    1465314656        return rc;
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