summaryrefslogtreecommitdiff
path: root/src/inc
diff options
context:
space:
mode:
authorJonghyun Park <parjong@gmail.com>2017-07-31 16:48:16 +0900
committerJan Kotas <jkotas@microsoft.com>2017-07-31 09:48:16 +0200
commit1c540c594cc55d8446086dcd979c48efa84e00a9 (patch)
tree51c47945f71336974265801adcd7d3bd5dd90080 /src/inc
parent8c7d6b3d2b6955d05e7289a09755a25d252273b1 (diff)
downloadcoreclr-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.h23
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;