VirtualBox

Changeset 61211 in vbox


Ignore:
Timestamp:
May 26, 2016 2:12:15 PM (9 years ago)
Author:
vboxsync
Message:

pgmPoolMonitorIsReused: Cross page stuff == reused, as does unaligned 8+ byte writes.

File:
1 edited

Legend:

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

    r61142 r61211  
    793793            return false;
    794794    }
     795
     796    /*
     797     * Anything having ESP on the left side means stack writes.
     798     */
    795799    if (    (    (pDis->Param1.fUse & DISUSE_REG_GEN32)
    796800             ||  (pDis->Param1.fUse & DISUSE_REG_GEN64))
     
    798802    {
    799803        Log4(("pgmPoolMonitorIsReused: ESP\n"));
     804        return true;
     805    }
     806
     807    /*
     808     * Page table updates are very very unlikely to be crossing page boundraries,
     809     * and we don't want to deal with that in pgmPoolMonitorChainChanging and such.
     810     */
     811    uint32_t const cbWrite = DISGetParamSize(pDis, &pDis->Param1);
     812    if ( (((uintptr_t)pvFault + cbWrite) >> X86_PAGE_SHIFT) != ((uintptr_t)pvFault >> X86_PAGE_SHIFT) )
     813    {
     814        Log4(("pgmPoolMonitorIsReused: cross page write\n"));
     815        return true;
     816    }
     817
     818    /*
     819     * Nobody does an unaligned 8 byte write to a page table, right.
     820     */
     821    if (cbWrite >= 8 && ((uintptr_t)pvFault & 7) != 0)
     822    {
     823        Log4(("pgmPoolMonitorIsReused: Unaligned 8+ byte write\n"));
    800824        return true;
    801825    }
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