[compiler-rt] d0c2076 - [TSan] Destroy ScopedReport on early return in ReportDestroyLocked (#228631)

via llvm-commits llvm-commits at lists.llvm.org
Sat Oct 3 11:20:30 PDT 2026


Author: Vitaly Buka
Date: 2026-10-03T18:20:21Z
New Revision: d0c2076a225debc49757ac945b494a5cebf139a3

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

LOG: [TSan] Destroy ScopedReport on early return in ReportDestroyLocked (#228631)

#151495 converted ScopedReport in ReportDestroyLocked from a stack
variable to placement new on __builtin_alloca storage, but left a bare
return when RestoreStack fails. This skipped ~ScopedReport(), leaking
ReportDesc and leaving ScopedErrorReportLock, report_mtx, and
ScopedIgnoreInterceptors permanently held.

Call rep->~ScopedReport() before returning when RestoreStack fails.

Assisted-by: Gemini

Added: 
    

Modified: 
    compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cpp b/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cpp
index bc2c62338c262..da3604a2b840d 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cpp
@@ -594,8 +594,10 @@ void ReportDestroyLocked(ThreadState *thr, uptr pc, uptr addr,
     DynamicMutexSet mset;
     uptr tag;
     if (!RestoreStack(EventType::kLock, last_lock.sid(), last_lock.epoch(),
-                      addr, 0, kAccessWrite, &tid, &trace, mset, &tag))
+                      addr, 0, kAccessWrite, &tid, &trace, mset, &tag)) {
+      rep->~ScopedReport();
       return;
+    }
     rep->AddStack(trace, true);
     rep->AddLocation(addr, 1);
   }


        


More information about the llvm-commits mailing list