[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