VirtualBox

Changeset 104032 in vbox for trunk


Ignore:
Timestamp:
Mar 25, 2024 6:30:19 AM (12 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
162420
Message:

VMM/PGM: Nested VMX: bugref:10607 Forward port r162255 (Fix dereference for PGMPOOLKIND_EPT_PML4_FOR_EPT_PML4)

File:
1 edited

Legend:

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

    r103261 r104032  
    47904790}
    47914791
     4792
     4793/**
     4794 * Clear references to shadowed pages in a SLAT EPT PML4 table.
     4795 *
     4796 * @param   pPool       The pool.
     4797 * @param   pPage       The page.
     4798 * @param   pShwPml4    The shadow PML4 table.
     4799 */
     4800DECLINLINE(void) pgmPoolTrackDerefNestedPML4(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PEPTPML4 pShwPml4)
     4801{
     4802    Assert(PGMPOOL_PAGE_IS_NESTED(pPage));
     4803    for (unsigned i = 0; i < RT_ELEMENTS(pShwPml4->a); i++)
     4804    {
     4805        X86PGPAEUINT const uPml4e = pShwPml4->a[i].u;
     4806        AssertMsg((uPml4e & (EPT_PML4E_MBZ_MASK | 0xfff0000000000f00)) == 0, ("uPml4e=%RX64\n", uPml4e));
     4807        if (uPml4e & EPT_PRESENT_MASK)
     4808        {
     4809            PPGMPOOLPAGE pSubPage = (PPGMPOOLPAGE)RTAvloHCPhysGet(&pPool->HCPhysTree, uPml4e & EPT_PML4E_PG_MASK);
     4810            if (pSubPage)
     4811                pgmPoolTrackFreeUser(pPool, pSubPage, pPage->idx, i);
     4812            else
     4813                AssertFatalMsgFailed(("%RX64\n", uPml4e & X86_PML4E_PG_MASK));
     4814        }
     4815    }
     4816}
    47924817#endif /* VBOX_WITH_NESTED_HWVIRT_VMX_EPT */
    47934818
     
    51375162        case PGMPOOLKIND_EPT_PDPT_FOR_EPT_PDPT:
    51385163            pgmPoolTrackDerefPDPTEPT(pPool, pPage, (PEPTPDPT)pvShw);
     5164            break;
     5165
     5166        case PGMPOOLKIND_EPT_PML4_FOR_EPT_PML4:
     5167            pgmPoolTrackDerefNestedPML4(pPool, pPage, (PEPTPML4)pvShw);
    51395168            break;
    51405169#endif
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