VirtualBox

Changeset 91991 in vbox for trunk/src


Ignore:
Timestamp:
Oct 22, 2021 4:25:20 AM (3 years ago)
Author:
vboxsync
Message:

VMM: Nested VMX: bugref:10092 Effective permissions for EPT PML4E.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllGst.h

    r91904 r91991  
    185185        else return PGM_GST_NAME(WalkReturnRsvdError)(pVCpu, pWalk, 4);
    186186
    187         /** @todo figure out what this effective stuff is about. */
    188         pWalk->Core.fEffective = fEffective = ((uint32_t)Pml4e.u & (X86_PML4E_RW  | X86_PML4E_US | X86_PML4E_PWT | X86_PML4E_PCD | X86_PML4E_A))
    189                                             | ((uint32_t)(Pml4e.u >> 63) ^ 1) /*NX */;
    190 # error "Implement me."
     187        Assert(!pVCpu->CTX_SUFF(pVM)->cpum.ro.GuestFeatures.fVmxModeBasedExecuteEpt);
     188        uint32_t const fEffectiveEpt = ((uint32_t)Pml4e.u & EPT_PML4E_ATTR_MASK) << PGMPTWALK_EFF_EPT_ATTR_SHIFT;
     189        uint8_t const fReadWrite = RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_R)
     190                                 | RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_W);
     191        uint8_t const fExecute   = RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_X_SUPER);
     192        uint8_t const fAccessed  = RT_BF_GET(fEffectiveEpt, PGM_BF_PTWALK_EFF_A);
     193        pWalk->Core.fEffective = fEffective = RT_BF_MAKE(PGM_BF_PTWALK_EFF_X,  fExecute)
     194                                            | RT_BF_MAKE(PGM_BF_PTWALK_EFF_RW, fReadWrite)
     195                                            | RT_BF_MAKE(PGM_BF_PTWALK_EFF_US, 1)
     196                                            | RT_BF_MAKE(PGM_BF_PTWALK_EFF_A,  fAccessed)
     197                                            | fEffectiveEpt;
     198
     199        rc = PGM_GCPHYS_2_PTR_BY_VMCPU(pVCpu, Pml4e.u & EPT_PML4E_PG_MASK, &pWalk->pPdpt);
     200        if (RT_SUCCESS(rc)) { /* probable */ }
     201        else return PGM_GST_NAME(WalkReturnBadPhysAddr)(pVCpu, pWalk, 3, rc);
    191202# endif
    192203    }
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