VirtualBox

Changeset 100232 in vbox for trunk


Ignore:
Timestamp:
Jun 21, 2023 9:50:56 AM (18 months ago)
Author:
vboxsync
Message:

VMM: Nested VMX: bugref:10318 Fixed incorrect accumulation of execute permissions in the NX attribute bit while walking EPT.
This addresses the log flooding in bugref:10474 as a consequence.

File:
1 edited

Legend:

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

    r98103 r100232  
    263263            fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,   fRead)
    264264                        | RT_BF_MAKE(PGM_PTATTRS_W,   fWrite)
    265                         | RT_BF_MAKE(PGM_PTATTRS_NX, !fExecute)
    266265                        | RT_BF_MAKE(PGM_PTATTRS_A,   fAccessed)
    267266                        | fEptAndBits;
     267            fEffective |= RT_BF_MAKE(PGM_PTATTRS_NX, !fExecute);
    268268            pWalk->fEffective = fEffective;
    269269        }
     
    280280            uint8_t const  fMemType    = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_MEMTYPE);
    281281            uint64_t const fEptAndBits = (fEptAttrs << PGM_PTATTRS_EPT_SHIFT) & fEptAndMask;
    282             fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,           fRead)
    283                         | RT_BF_MAKE(PGM_PTATTRS_W,           fWrite)
    284                         | RT_BF_MAKE(PGM_PTATTRS_NX,         !fExecute)
    285                         | RT_BF_MAKE(PGM_PTATTRS_A,           fAccessed)
     282            fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,            fRead)
     283                        | RT_BF_MAKE(PGM_PTATTRS_W,            fWrite)
     284                        | RT_BF_MAKE(PGM_PTATTRS_A,            fAccessed)
    286285                        | fEptAndBits;
    287             fEffective |= RT_BF_MAKE(PGM_PTATTRS_D,           fDirty)
    288                         | RT_BF_MAKE(PGM_PTATTRS_EPT_MEMTYPE, fMemType);
     286            fEffective |= RT_BF_MAKE(PGM_PTATTRS_D,            fDirty)
     287                        | RT_BF_MAKE(PGM_PTATTRS_EPT_MEMTYPE,  fMemType)
     288                        | RT_BF_MAKE(PGM_PTATTRS_NX,          !fExecute);
    289289            pWalk->fEffective = fEffective;
    290290
     
    326326            fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,   fRead)
    327327                        | RT_BF_MAKE(PGM_PTATTRS_W,   fWrite)
    328                         | RT_BF_MAKE(PGM_PTATTRS_NX, !fExecute)
    329328                        | RT_BF_MAKE(PGM_PTATTRS_A,   fAccessed)
    330329                        | fEptAndBits;
     330            fEffective |= RT_BF_MAKE(PGM_PTATTRS_NX, !fExecute);
    331331            pWalk->fEffective = fEffective;
    332332        }
     
    343343            uint8_t const  fMemType    = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_MEMTYPE);
    344344            uint64_t const fEptAndBits = (fEptAttrs << PGM_PTATTRS_EPT_SHIFT) & fEptAndMask;
    345             fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,           fRead)
    346                         | RT_BF_MAKE(PGM_PTATTRS_W,           fWrite)
    347                         | RT_BF_MAKE(PGM_PTATTRS_NX,         !fExecute)
    348                         | RT_BF_MAKE(PGM_PTATTRS_A,           fAccessed)
     345            fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,            fRead)
     346                        | RT_BF_MAKE(PGM_PTATTRS_W,            fWrite)
     347                        | RT_BF_MAKE(PGM_PTATTRS_A,            fAccessed)
    349348                        | fEptAndBits;
    350             fEffective |= RT_BF_MAKE(PGM_PTATTRS_D,           fDirty)
    351                         | RT_BF_MAKE(PGM_PTATTRS_EPT_MEMTYPE, fMemType);
     349            fEffective |= RT_BF_MAKE(PGM_PTATTRS_D,            fDirty)
     350                        | RT_BF_MAKE(PGM_PTATTRS_EPT_MEMTYPE,  fMemType)
     351                        | RT_BF_MAKE(PGM_PTATTRS_NX,          !fExecute);
    352352            pWalk->fEffective = fEffective;
    353353
     
    392392        uint8_t const  fMemType    = RT_BF_GET(fEptAttrs, VMX_BF_EPT_PT_MEMTYPE);
    393393        uint64_t const fEptAndBits = (fEptAttrs << PGM_PTATTRS_EPT_SHIFT) & fEptAndMask;
    394         fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,           fRead)
    395                     | RT_BF_MAKE(PGM_PTATTRS_W,           fWrite)
    396                     | RT_BF_MAKE(PGM_PTATTRS_NX,         !fExecute)
    397                     | RT_BF_MAKE(PGM_PTATTRS_A,           fAccessed)
     394        fEffective &= RT_BF_MAKE(PGM_PTATTRS_R,            fRead)
     395                    | RT_BF_MAKE(PGM_PTATTRS_W,            fWrite)
     396                    | RT_BF_MAKE(PGM_PTATTRS_A,            fAccessed)
    398397                    | fEptAndBits;
    399         fEffective |= RT_BF_MAKE(PGM_PTATTRS_D,           fDirty)
    400                     | RT_BF_MAKE(PGM_PTATTRS_EPT_MEMTYPE, fMemType);
     398        fEffective |= RT_BF_MAKE(PGM_PTATTRS_D,            fDirty)
     399                    | RT_BF_MAKE(PGM_PTATTRS_EPT_MEMTYPE,  fMemType)
     400                    | RT_BF_MAKE(PGM_PTATTRS_NX,          !fExecute);
    401401        pWalk->fEffective = fEffective;
    402402
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