diff options
author | Jonghyun Park <parjong@gmail.com> | 2017-07-31 16:48:16 +0900 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2017-07-31 09:48:16 +0200 |
commit | 1c540c594cc55d8446086dcd979c48efa84e00a9 (patch) | |
tree | 51c47945f71336974265801adcd7d3bd5dd90080 /src/inc | |
parent | 8c7d6b3d2b6955d05e7289a09755a25d252273b1 (diff) | |
download | coreclr-1c540c594cc55d8446086dcd979c48efa84e00a9.tar.gz coreclr-1c540c594cc55d8446086dcd979c48efa84e00a9.tar.bz2 coreclr-1c540c594cc55d8446086dcd979c48efa84e00a9.zip |
Fill freed loader heap chunk with non-zero value (#12731)
* Add FEATURE_LOADER_HEAP_GUARD feature
* Invoke memset only for reclaimed regions
* Enable FEATURE_LOADER_HEAP_GUARD by default
* Insert trap inside UMEntryThunk::Terminate
* Make all exectuable heaps not to zero-initialize itself
Use fZeroInit (instead of fMakeRelazed)
* Add comment
* Revert unnecessary changes
* Add and use 'Poison' method to insert a trap
* Do NOT invoke FlushInstructionCache
* Update comment
* Add comment on ARM Poisoning instruction
* Use X86_INSTR_INT3 instead of 0xCC
Diffstat (limited to 'src/inc')
-rw-r--r-- | src/inc/loaderheap.h | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/inc/loaderheap.h b/src/inc/loaderheap.h index 7d4c48f5e8..4333505e83 100644 --- a/src/inc/loaderheap.h +++ b/src/inc/loaderheap.h @@ -217,7 +217,7 @@ private: size_t * m_pPrivatePerfCounter_LoaderBytes; - DWORD m_flProtect; + DWORD m_Options; LoaderHeapFreeBlock *m_pFirstFreeBlock; @@ -288,7 +288,8 @@ protected: SIZE_T dwReservedRegionSize, size_t *pPrivatePerfCounter_LoaderBytes = NULL, RangeList *pRangeList = NULL, - BOOL fMakeExecutable = FALSE); + BOOL fMakeExecutable = FALSE, + BOOL fZeroInit = TRUE); ~UnlockedLoaderHeap(); #endif @@ -398,10 +399,8 @@ public: return m_dwTotalAlloc; } - BOOL IsExecutable() - { - return (PAGE_EXECUTE_READWRITE == m_flProtect); - } + BOOL IsExecutable(); + BOOL IsZeroInit(); public: @@ -447,14 +446,16 @@ public: DWORD dwCommitBlockSize, size_t *pPrivatePerfCounter_LoaderBytes = NULL, RangeList *pRangeList = NULL, - BOOL fMakeExecutable = FALSE + BOOL fMakeExecutable = FALSE, + BOOL fZeroInit = TRUE ) : UnlockedLoaderHeap(dwReserveBlockSize, dwCommitBlockSize, NULL, 0, pPrivatePerfCounter_LoaderBytes, pRangeList, - fMakeExecutable) + fMakeExecutable, + fZeroInit) { WRAPPER_NO_CONTRACT; m_CriticalSection = NULL; @@ -469,7 +470,8 @@ public: SIZE_T dwReservedRegionSize, size_t *pPrivatePerfCounter_LoaderBytes = NULL, RangeList *pRangeList = NULL, - BOOL fMakeExecutable = FALSE + BOOL fMakeExecutable = FALSE, + BOOL fZeroInit = TRUE ) : UnlockedLoaderHeap(dwReserveBlockSize, dwCommitBlockSize, @@ -477,7 +479,8 @@ public: dwReservedRegionSize, pPrivatePerfCounter_LoaderBytes, pRangeList, - fMakeExecutable) + fMakeExecutable, + fZeroInit) { WRAPPER_NO_CONTRACT; m_CriticalSection = NULL; |