[compiler-rt] [ASan] Limits the conditions of the deadlock patch (PR #137127)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 24 00:01:48 PDT 2025
https://github.com/Camsyn created https://github.com/llvm/llvm-project/pull/137127
PR #131756 introduced a patch to fix a deadlock between LSan and ASan.
The relevant deadlock only occurs when LSan is enabled and `dl_iterate_phdr` is used for Stop-the-World, i.e., under the condition `CAN_SANITIZE_LEAKS && (SANITIZER_LINUX || SANITIZER_NETBSD)`.
Therefore, this commit also sets the effective condition of this patch to the above condition, avoiding unnecessary problems in other environments, e.g., stack overflow on MSVC/Windows.
>From 0881202032686676f4f6402d48ed571816d41d6d Mon Sep 17 00:00:00 2001
From: Camsyn <camsyn at foxmail.com>
Date: Thu, 24 Apr 2025 14:57:07 +0800
Subject: [PATCH] [ASan] Limits the conditions of the deadlock patch
PR #131756 introduced a patch to fix a deadlock between LSan and ASan.
The relevant deadlock only occurs when LSan is enabled and
`dl_iterate_phdr` is used for Stop-the-World, i.e., under the condition
`CAN_SANITIZE_LEAKS && (SANITIZER_LINUX || SANITIZER_NETBSD)`.
Therefore, this commit also sets the effective condition of this patch
to the above conditions, avoiding unnecessary problems in other
environments.
---
compiler-rt/lib/asan/asan_report.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/compiler-rt/lib/asan/asan_report.cpp b/compiler-rt/lib/asan/asan_report.cpp
index 8b22aebe7cafc..e049a21e4e16d 100644
--- a/compiler-rt/lib/asan/asan_report.cpp
+++ b/compiler-rt/lib/asan/asan_report.cpp
@@ -21,6 +21,7 @@
#include "asan_scariness_score.h"
#include "asan_stack.h"
#include "asan_thread.h"
+#include "lsan/lsan_common.h"
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_flags.h"
#include "sanitizer_common/sanitizer_interface_internal.h"
@@ -149,7 +150,7 @@ class ScopedInErrorReport {
// 2. Subsequent error reporting avoids nested lock acquisition patterns.
// 3. Eliminates the lock order inversion risk between libdl and ASan's
// thread registry.
-#if !SANITIZER_SYMBOLIZER_MARKUP
+#if CAN_SANITIZE_LEAKS && (SANITIZER_LINUX || SANITIZER_NETBSD)
Symbolizer::GetOrInit()->GetRefreshedListOfModules();
#endif
More information about the llvm-commits
mailing list