diff --git a/source/loader/layers/sanitizer/asan/asan_interceptor.cpp b/source/loader/layers/sanitizer/asan/asan_interceptor.cpp index a64559540c..7825f8518e 100644 --- a/source/loader/layers/sanitizer/asan/asan_interceptor.cpp +++ b/source/loader/layers/sanitizer/asan/asan_interceptor.cpp @@ -845,7 +845,8 @@ ContextInfo::~ContextInfo() { assert(Result == UR_RESULT_SUCCESS); // check memory leaks - if (getAsanInterceptor()->isNormalExit()) { + if (getAsanInterceptor()->getOptions().DetectLeaks && + getAsanInterceptor()->isNormalExit()) { std::vector AllocInfos = getAsanInterceptor()->findAllocInfoByContext(Handle); for (const auto &It : AllocInfos) { diff --git a/source/loader/layers/sanitizer/asan/asan_interceptor.hpp b/source/loader/layers/sanitizer/asan/asan_interceptor.hpp index 1f8d6dab31..fae4f7e6ca 100644 --- a/source/loader/layers/sanitizer/asan/asan_interceptor.hpp +++ b/source/loader/layers/sanitizer/asan/asan_interceptor.hpp @@ -299,6 +299,8 @@ class AsanInterceptor { std::shared_ptr &DeviceInfo); private: + // m_Options may be used in other places, place it at the top + AsanOptions m_Options; std::unordered_map> m_ContextMap; ur_shared_mutex m_ContextMapMutex; @@ -324,8 +326,6 @@ class AsanInterceptor { std::unique_ptr m_Quarantine; - AsanOptions m_Options; - std::unordered_set m_Adapters; ur_shared_mutex m_AdaptersMutex; diff --git a/source/loader/layers/sanitizer/asan/asan_options.cpp b/source/loader/layers/sanitizer/asan/asan_options.cpp index 5953a75c85..e889a4b539 100644 --- a/source/loader/layers/sanitizer/asan/asan_options.cpp +++ b/source/loader/layers/sanitizer/asan/asan_options.cpp @@ -88,6 +88,7 @@ AsanOptions::AsanOptions() { SetBoolOption("detect_locals", DetectLocals); SetBoolOption("detect_privates", DetectPrivates); SetBoolOption("print_stats", PrintStats); + SetBoolOption("detect_leaks", DetectLeaks); auto KV = OptionsEnvMap->find("quarantine_size_mb"); if (KV != OptionsEnvMap->end()) { diff --git a/source/loader/layers/sanitizer/asan/asan_options.hpp b/source/loader/layers/sanitizer/asan/asan_options.hpp index 1385fdf6e3..711232bba7 100644 --- a/source/loader/layers/sanitizer/asan/asan_options.hpp +++ b/source/loader/layers/sanitizer/asan/asan_options.hpp @@ -26,6 +26,7 @@ struct AsanOptions { bool DetectPrivates = true; bool PrintStats = false; bool DetectKernelArguments = true; + bool DetectLeaks = true; explicit AsanOptions(); };