[compiler-rt] [NFCI] [hwasan] Add test demonstrating hwasan lsan false positive (PR #142874)

Florian Mayer via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 4 16:22:38 PDT 2025


https://github.com/fmayer updated https://github.com/llvm/llvm-project/pull/142874

>From 4411c72b01ed212955ea28f34cc794b2de5142e0 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Wed, 4 Jun 2025 16:06:40 -0700
Subject: [PATCH 1/4] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.4
---
 .../test/hwasan/TestCases/Posix/dlerror.cpp   | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp

diff --git a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
new file mode 100644
index 0000000000000..8b1e02771d1f8
--- /dev/null
+++ b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
@@ -0,0 +1,28 @@
+// Make sure dlerror is not classified as a leak even if we use dynamic TLS.
+// RUN: %clangxx_hwasan -O0 %s -o %t && HWASAN_OPTIONS=detect_leaks=1 %run %t
+// XFAIL: *
+
+#include <assert.h>
+#include <dlfcn.h>
+#include <pthread.h>
+#include <sanitizer/hwasan_interface.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+constexpr auto kKeys = 100;
+
+int main(int argc, char **argv) {
+  __hwasan_enable_allocator_tagging();
+  // Exhaust static TLS slots to force use of dynamic TLS.
+  pthread_key_t keys[kKeys];
+  for (int i = 0; i < kKeys; ++i) {
+    assert(pthread_key_create(&keys[i], nullptr) == 0);
+  }
+  void* o = dlopen("invalid_file_name.so", 0);
+  const char* err = dlerror();
+  for (int i = 0; i < kKeys; ++i) {
+    assert(pthread_key_delete(keys[i]) == 0);
+  }
+  return 0;
+}

>From e835e6f1dd273f0f1d1dd8b3592c2eb5104ab857 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Wed, 4 Jun 2025 16:08:15 -0700
Subject: [PATCH 2/4] upd

Created using spr 1.3.4
---
 compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
index 8b1e02771d1f8..2b8269852d50b 100644
--- a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
+++ b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
@@ -1,4 +1,6 @@
 // Make sure dlerror is not classified as a leak even if we use dynamic TLS.
+// This is currently not implemented, so this test is XFAIL.
+
 // RUN: %clangxx_hwasan -O0 %s -o %t && HWASAN_OPTIONS=detect_leaks=1 %run %t
 // XFAIL: *
 

>From 32168e19597c1308b90723a47e9d4468f1bacf2f Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Wed, 4 Jun 2025 16:10:51 -0700
Subject: [PATCH 3/4] fmt

Created using spr 1.3.4
---
 compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
index 2b8269852d50b..a96d929f33bc1 100644
--- a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
+++ b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
@@ -21,8 +21,8 @@ int main(int argc, char **argv) {
   for (int i = 0; i < kKeys; ++i) {
     assert(pthread_key_create(&keys[i], nullptr) == 0);
   }
-  void* o = dlopen("invalid_file_name.so", 0);
-  const char* err = dlerror();
+  void *o = dlopen("invalid_file_name.so", 0);
+  const char *err = dlerror();
   for (int i = 0; i < kKeys; ++i) {
     assert(pthread_key_delete(keys[i]) == 0);
   }

>From 3f9418433f39ec7335f388402555269d9f4508f9 Mon Sep 17 00:00:00 2001
From: Florian Mayer <fmayer at google.com>
Date: Wed, 4 Jun 2025 16:22:24 -0700
Subject: [PATCH 4/4] more keys

Created using spr 1.3.4
---
 compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
index a96d929f33bc1..15455ba5af780 100644
--- a/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
+++ b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
@@ -12,7 +12,7 @@
 #include <string.h>
 #include <unistd.h>
 
-constexpr auto kKeys = 100;
+constexpr auto kKeys = 500;
 
 int main(int argc, char **argv) {
   __hwasan_enable_allocator_tagging();



More information about the llvm-commits mailing list