[compiler-rt] [tsan] Change personality CHECK to Printf() + Die() (PR #142821)
Thurston Dang via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 4 10:42:03 PDT 2025
https://github.com/thurstond created https://github.com/llvm/llvm-project/pull/142821
Currently, if TSan needs to disable ASLR but is unable to do so, it aborts with a cryptic message:
```
ThreadSanitizer: CHECK failed: tsan_platform_linux.cpp:290 "((personality(old_personality | ADDR_NO_RANDOMIZE))) != ((-1))"
```
and a segfault (https://github.com/google/sanitizers/issues/837#issuecomment-2939267531).
This patch replaces the CHECK with more user-friendly diagnostics and suggestions via printf, followed by Die().
>From 388b83e745815fe839cd329c2c7a6ea7ddd2248d Mon Sep 17 00:00:00 2001
From: Thurston Dang <thurston at google.com>
Date: Wed, 4 Jun 2025 17:37:09 +0000
Subject: [PATCH] [tsan] Change personality CHECK to Printf() + Die()
Currently, if TSan needs to disable ASLR but is unable to do so, it
aborts with a cryptic message:
ThreadSanitizer: CHECK failed: tsan_platform_linux.cpp:290 "((personality(old_personality | ADDR_NO_RANDOMIZE))) != ((-1))"
and a segfault (https://github.com/google/sanitizers/issues/837#issuecomment-2939267531).
This patch replaces the CHECK with more user-friendly diagnostics and
suggestions via printf, followed by Die().
---
.../lib/tsan/rtl/tsan_platform_linux.cpp | 20 +++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp
index 373acd3d95d01..a20c83ab37159 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp
@@ -259,7 +259,14 @@ static void ReExecIfNeeded(bool ignore_heap) {
"WARNING: Program is run with randomized virtual address "
"space, which wouldn't work with ThreadSanitizer on Android.\n"
"Re-execing with fixed virtual address space.\n");
- CHECK_NE(personality(old_personality | ADDR_NO_RANDOMIZE), -1);
+
+ if (personality(old_personality | ADDR_NO_RANDOMIZE) == -1) {
+ Printf("FATAL: ThreadSanitizer: unable to disable ASLR (perhaps "
+ "sandboxing is enabled?).\n");
+ Printf("FATAL: Please rerun without sandboxing or ASLR.\n");
+ Die();
+ }
+
reexec = true;
}
# endif
@@ -287,7 +294,16 @@ static void ReExecIfNeeded(bool ignore_heap) {
"possibly due to high-entropy ASLR.\n"
"Re-execing with fixed virtual address space.\n"
"N.B. reducing ASLR entropy is preferable.\n");
- CHECK_NE(personality(old_personality | ADDR_NO_RANDOMIZE), -1);
+
+ if (personality(old_personality | ADDR_NO_RANDOMIZE) == -1) {
+ Printf("FATAL: ThreadSanitizer: encountered an incompatible memory "
+ "but was unable to disable ASLR (perhaps sandboxing is "
+ "enabled?).\n");
+ Printf("FATAL: Please rerun with lower ASLR entropy, ASLR disabled, "
+ "and/or sandboxing disabled.\n");
+ Die();
+ }
+
reexec = true;
} else {
Printf(
More information about the llvm-commits
mailing list