[compiler-rt] 6efa850 - TSAN: (Re)Mark shadow memory nondumpable after a reset

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 14 11:29:42 PST 2022


Author: Wiktor Garbacz
Date: 2022-12-14T11:29:35-08:00
New Revision: 6efa850b096dc31f8e161374c1881ad715f9b946

URL: https://github.com/llvm/llvm-project/commit/6efa850b096dc31f8e161374c1881ad715f9b946
DIFF: https://github.com/llvm/llvm-project/commit/6efa850b096dc31f8e161374c1881ad715f9b946.diff

LOG: TSAN: (Re)Mark shadow memory nondumpable after a reset

Shadow memory was not marked as non-dumpable after a reset resulting in process taking a very long time to generate a coredump.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D139425

Added: 
    

Modified: 
    compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp
    compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
    compiler-rt/lib/tsan/rtl/tsan_rtl.h

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp b/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp
index 71874aad8dc5e..e7dcd664dc0d2 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_platform_posix.cpp
@@ -32,7 +32,7 @@ static const char kShadowMemoryMappingHint[] =
     "TSAN_OPTIONS=%s=0\n";
 
 #  if !SANITIZER_GO
-static void DontDumpShadow(uptr addr, uptr size) {
+void DontDumpShadow(uptr addr, uptr size) {
   if (common_flags()->use_madv_dontdump)
     if (!DontDumpShadowMemory(addr, size)) {
       Printf(kShadowMemoryMappingWarning, SanitizerToolName, addr, addr + size,

diff  --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp b/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
index db3d94518b825..6b1ec1d04fdba 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp
@@ -213,6 +213,9 @@ static void DoResetImpl(uptr epoch) {
 #else
   auto resetFailed =
       !MmapFixedSuperNoReserve(shadow_begin, shadow_end-shadow_begin, "shadow");
+#  if !SANITIZER_GO
+  DontDumpShadow(shadow_begin, shadow_end - shadow_begin);
+#  endif
 #endif
   if (resetFailed) {
     Printf("failed to reset shadow memory\n");

diff  --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.h b/compiler-rt/lib/tsan/rtl/tsan_rtl.h
index 5e3854461316e..298b4b32d5cde 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl.h
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.h
@@ -484,6 +484,7 @@ void MapThreadTrace(uptr addr, uptr size, const char *name);
 void DontNeedShadowFor(uptr addr, uptr size);
 void UnmapShadow(ThreadState *thr, uptr addr, uptr size);
 void InitializeShadowMemory();
+void DontDumpShadow(uptr addr, uptr size);
 void InitializeInterceptors();
 void InitializeLibIgnore();
 void InitializeDynamicAnnotations();


        


More information about the llvm-commits mailing list