VirtualBox

Changeset 97162 in vbox


Ignore:
Timestamp:
Oct 15, 2022 6:33:15 AM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154135
Message:

VMM/PGM: Nested VMX: bugref:10092 We don't shadow reserved bits in the guest EPT tables.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PGM.cpp

    r97145 r97162  
    16791679    uint64_t const fGstEptMbzBigPdpteMask = EPT_PDPTE1G_MBZ_MASK
    16801680                                          | (RT_BF_GET(fEptVpidCap, VMX_BF_EPT_VPID_CAP_PDPTE_1G) ^ 1) << EPT_E_BIT_LEAF;
    1681     uint64_t const GCPhysRsvdAddrMask     = pVM->pgm.s.GCPhysInvAddrMask & UINT64_C(0x000fffffffffffff); /* bits 63:52 ignored */
     1681    //uint64_t const GCPhysRsvdAddrMask     = pVM->pgm.s.GCPhysInvAddrMask & UINT64_C(0x000fffffffffffff); /* bits 63:52 ignored */
    16821682#endif
    16831683    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
     
    17251725               && !pVM->cpum.ro.GuestFeatures.fVmxEptXcptVe
    17261726               && !(fEptVpidCap & MSR_IA32_VMX_EPT_VPID_CAP_ACCESS_DIRTY));
    1727         /* We need to shadow reserved bits as guest EPT tables can set them to trigger EPT misconfigs.  */
    1728         pVCpu->pgm.s.fGstEptShadowedPteMask    = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_IGNORE_PAT;
    1729         pVCpu->pgm.s.fGstEptShadowedPdeMask    = GCPhysRsvdAddrMask | EPT_PRESENT_MASK;
    1730         pVCpu->pgm.s.fGstEptShadowedBigPdeMask = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_IGNORE_PAT | EPT_E_LEAF;
    1731         pVCpu->pgm.s.fGstEptShadowedPdpteMask  = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_IGNORE_PAT | EPT_E_LEAF;
    1732         pVCpu->pgm.s.fGstEptShadowedPml4eMask  = GCPhysRsvdAddrMask | EPT_PRESENT_MASK | EPT_PML4E_MBZ_MASK;
     1727        /* We currently do -not- shadow reserved bits in guest page tables but instead trap them using non-present permissions,
     1728           see todo in (NestedSyncPT). */
     1729        pVCpu->pgm.s.fGstEptShadowedPteMask    = EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_IGNORE_PAT;
     1730        pVCpu->pgm.s.fGstEptShadowedPdeMask    = EPT_PRESENT_MASK;
     1731        pVCpu->pgm.s.fGstEptShadowedBigPdeMask = EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_IGNORE_PAT | EPT_E_LEAF;
     1732        pVCpu->pgm.s.fGstEptShadowedPdpteMask  = EPT_PRESENT_MASK | EPT_E_MEMTYPE_MASK | EPT_E_IGNORE_PAT | EPT_E_LEAF;
     1733        pVCpu->pgm.s.fGstEptShadowedPml4eMask  = EPT_PRESENT_MASK | EPT_PML4E_MBZ_MASK;
    17331734        /* If mode-based execute control for EPT is enabled, we would need to include bit 10 in the present mask. */
    1734         pVCpu->pgm.s.fGstEptPresentMask       = EPT_PRESENT_MASK;
     1735        pVCpu->pgm.s.fGstEptPresentMask        = EPT_PRESENT_MASK;
    17351736#endif
    17361737    }
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