diff options
author | Andrey Drobyshev <a.drobyshev@samsung.com> | 2019-07-16 15:23:18 +0300 |
---|---|---|
committer | Vyacheslav Cherkashin <v.cherkashin@samsung.com> | 2019-07-26 13:54:06 +0300 |
commit | ad1d0aa305e2ada610745accee6abf1972423508 (patch) | |
tree | 13ef9336d2eed44320cccdb2b383f7a2ea8f0bbf /src/pal/src/loader/module.cpp | |
parent | 59075187072252b2f048d2b4616f3f86960a2be6 (diff) | |
download | coreclr-ad1d0aa305e2ada610745accee6abf1972423508.tar.gz coreclr-ad1d0aa305e2ada610745accee6abf1972423508.tar.bz2 coreclr-ad1d0aa305e2ada610745accee6abf1972423508.zip |
[Tizen] Implement detecting of sanitized libraries
Parse ".dynamic" section (ELF dynamic array tags) of the module being
added, find ".rel(a).plt" section and search it for presence of
'__asan_init' symbol.
Change-Id: Ie7cc4c818b791b5f00713b42ba15131325b8152c
Signed-off-by: Andrey Drobyshev <a.drobyshev@samsung.com>
Diffstat (limited to 'src/pal/src/loader/module.cpp')
-rw-r--r-- | src/pal/src/loader/module.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/pal/src/loader/module.cpp b/src/pal/src/loader/module.cpp index e39cd6e41f..4dc06d0944 100644 --- a/src/pal/src/loader/module.cpp +++ b/src/pal/src/loader/module.cpp @@ -60,6 +60,10 @@ SET_DEFAULT_DEBUG_CHANNEL(LOADER); // some headers have code with asserts, so do #include <gnu/lib-names.h> #endif +#ifdef TIZEN_ASAN_ENVIRONMENT +#include "tizenasanenvmodule.h" +#endif // TIZEN_ASAN_ENVIRONMENT + using namespace CorUnix; // In safemath.h, Template SafeInt uses macro _ASSERTE, which need to use variable @@ -802,6 +806,17 @@ PAL_UnregisterModule( PERF_EXIT(PAL_UnregisterModule); } +#ifdef TIZEN_ASAN_ENVIRONMENT +PALIMPORT +BOOL +PALAPI +PAL_IsSanitizedModule( + IN HINSTANCE hInstance) +{ + return ((MODSTRUCT *)hInstance)->is_sanitized; +} +#endif // TIZEN_ASAN_ENVIRONMENT + /*++ PAL_LOADLoadPEFile @@ -1548,6 +1563,10 @@ static MODSTRUCT *LOADAllocModule(NATIVE_LIBRARY_HANDLE dl_handle, LPCSTR name) #else // NEED_DLCOMPAT module->refcount = 1; #endif // NEED_DLCOMPAT + +#ifdef TIZEN_ASAN_ENVIRONMENT + module->is_sanitized = FALSE; +#endif // TIZEN_ASAN_ENVIRONMENT module->self = module; module->hinstance = nullptr; module->threadLibCalls = TRUE; @@ -1622,6 +1641,10 @@ static MODSTRUCT *LOADAddModule(NATIVE_LIBRARY_HANDLE dl_handle, LPCSTR libraryN exe_module.prev->next = module; exe_module.prev = module; +#ifdef TIZEN_ASAN_ENVIRONMENT + module->is_sanitized = module_is_sanitized(dl_handle); +#endif // TIZEN_ASAN_ENVIRONMENT + #if RETURNS_NEW_HANDLES_ON_REPEAT_DLOPEN module->inode = stat_buf.st_ino; module->device = stat_buf.st_dev; |