Skip to content

[NFCI] [hwasan] Add test demonstrating hwasan lsan false positive #142874

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

fmayer
Copy link
Contributor

@fmayer fmayer commented Jun 4, 2025

No description provided.

fmayer added 2 commits June 4, 2025 16:06
Created using spr 1.3.4
Created using spr 1.3.4
@fmayer fmayer requested a review from thurstond June 4, 2025 23:08
@fmayer fmayer marked this pull request as ready for review June 4, 2025 23:08
@llvmbot
Copy link
Member

llvmbot commented Jun 4, 2025

@llvm/pr-subscribers-compiler-rt-sanitizer

Author: Florian Mayer (fmayer)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/142874.diff

1 Files Affected:

  • (added) compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp (+30)
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..2b8269852d50b
--- /dev/null
+++ b/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp
@@ -0,0 +1,30 @@
+// 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: *
+
+#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;
+}

Copy link

github-actions bot commented Jun 4, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

Created using spr 1.3.4
Created using spr 1.3.4
@fmayer fmayer merged commit dbee0d5 into main Jun 5, 2025
10 checks passed
@fmayer fmayer deleted the users/fmayer/spr/nfci-hwasan-add-test-demonstrating-hwasan-lsan-false-positive branch June 5, 2025 03:02
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jun 5, 2025

LLVM Buildbot has detected a new failure on builder sanitizer-aarch64-linux running on sanitizer-buildbot7 while building compiler-rt at step 2 "annotate".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/51/builds/17394

Here is the relevant piece of the build log for the reference
Step 2 (annotate) failure: 'python ../sanitizer_buildbot/sanitizers/zorg/buildbot/builders/sanitizers/buildbot_selector.py' (failure)
...
[183/186] Generating Msan-aarch64-with-call-Test
[184/186] Generating MSAN_INST_TEST_OBJECTS.msan_test.cpp.aarch64.o
[185/186] Generating Msan-aarch64-Test
[185/186] Running compiler_rt regression tests
llvm-lit: /home/b/sanitizer-aarch64-linux/build/llvm-project/llvm/utils/lit/lit/discovery.py:276: warning: input '/home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/interception/Unit' contained no tests
llvm-lit: /home/b/sanitizer-aarch64-linux/build/llvm-project/llvm/utils/lit/lit/discovery.py:276: warning: input '/home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/sanitizer_common/Unit' contained no tests
llvm-lit: /home/b/sanitizer-aarch64-linux/build/llvm-project/llvm/utils/lit/lit/main.py:73: note: The test suite configuration requested an individual test timeout of 0 seconds but a timeout of 900 seconds was requested on the command line. Forcing timeout to be 900 seconds.
-- Testing: 5924 tests, 72 workers --
Testing:  0.. 10.. 20.
XPASS: HWAddressSanitizer-aarch64 :: TestCases/Posix/dlerror.cpp (1557 of 5924)
******************** TEST 'HWAddressSanitizer-aarch64 :: TestCases/Posix/dlerror.cpp' FAILED ********************
Exit Code: 0

Command Output (stderr):
--
/home/b/sanitizer-aarch64-linux/build/build_default/./bin/clang  --driver-mode=g++   -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta   -gline-tables-only -fsanitize=hwaddress -fuse-ld=lld -mllvm -hwasan-globals -mllvm -hwasan-use-short-granules -mllvm -hwasan-instrument-landing-pads=0 -mllvm -hwasan-instrument-personality-functions -O0 /home/b/sanitizer-aarch64-linux/build/llvm-project/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp -o /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp && HWASAN_OPTIONS=detect_leaks=1  /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp # RUN: at line 4
+ /home/b/sanitizer-aarch64-linux/build/build_default/./bin/clang --driver-mode=g++ -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta -gline-tables-only -fsanitize=hwaddress -fuse-ld=lld -mllvm -hwasan-globals -mllvm -hwasan-use-short-granules -mllvm -hwasan-instrument-landing-pads=0 -mllvm -hwasan-instrument-personality-functions -O0 /home/b/sanitizer-aarch64-linux/build/llvm-project/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp -o /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp
+ HWASAN_OPTIONS=detect_leaks=1
+ /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp

--

********************
Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90.. 

2 warning(s) in tests
Slowest Tests:
--------------------------------------------------------------------------
28.28s: ThreadSanitizer-aarch64 :: bench_threads.cpp
27.25s: ThreadSanitizer-aarch64 :: restore_stack.cpp
20.84s: ThreadSanitizer-aarch64 :: signal_thread.cpp
20.13s: libFuzzer-aarch64-default-Linux :: value-profile-set.test
19.37s: libFuzzer-aarch64-libcxx-Linux :: value-profile-set.test
17.75s: libFuzzer-aarch64-static-libcxx-Linux :: value-profile-set.test
16.74s: HWAddressSanitizer-aarch64 :: TestCases/Linux/create-thread-stress.cpp
16.51s: libFuzzer-aarch64-default-Linux :: value-profile-switch.test
15.46s: libFuzzer-aarch64-default-Linux :: minimize_timeout.test
14.40s: ThreadSanitizer-aarch64 :: compare_exchange_acquire_fence.cpp
13.92s: libFuzzer-aarch64-libcxx-Linux :: value-profile-switch.test
13.84s: Profile-aarch64 :: Posix/instrprof-value-prof-shared.test
12.87s: libFuzzer-aarch64-static-libcxx-Linux :: value-profile-switch.test
12.17s: DataFlowSanitizer-aarch64 :: custom.cpp
11.52s: ThreadSanitizer-aarch64 :: stress.cpp
11.52s: libFuzzer-aarch64-static-libcxx-Linux :: minimize_timeout.test
11.20s: libFuzzer-aarch64-default-Linux :: value-profile-cmp.test
10.67s: AddressSanitizer-Unit :: ./Asan-aarch64-calls-Noinst-Test/AddressSanitizer/ThreadedQuarantineTest
10.54s: libFuzzer-aarch64-default-Linux :: minimize_crash.test
10.50s: libFuzzer-aarch64-static-libcxx-Linux :: minimize_crash.test

Step 9 (test compiler-rt symbolizer) failure: test compiler-rt symbolizer (failure)
...
[183/186] Generating Msan-aarch64-with-call-Test
[184/186] Generating MSAN_INST_TEST_OBJECTS.msan_test.cpp.aarch64.o
[185/186] Generating Msan-aarch64-Test
[185/186] Running compiler_rt regression tests
llvm-lit: /home/b/sanitizer-aarch64-linux/build/llvm-project/llvm/utils/lit/lit/discovery.py:276: warning: input '/home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/interception/Unit' contained no tests
llvm-lit: /home/b/sanitizer-aarch64-linux/build/llvm-project/llvm/utils/lit/lit/discovery.py:276: warning: input '/home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/sanitizer_common/Unit' contained no tests
llvm-lit: /home/b/sanitizer-aarch64-linux/build/llvm-project/llvm/utils/lit/lit/main.py:73: note: The test suite configuration requested an individual test timeout of 0 seconds but a timeout of 900 seconds was requested on the command line. Forcing timeout to be 900 seconds.
-- Testing: 5924 tests, 72 workers --
Testing:  0.. 10.. 20.
XPASS: HWAddressSanitizer-aarch64 :: TestCases/Posix/dlerror.cpp (1557 of 5924)
******************** TEST 'HWAddressSanitizer-aarch64 :: TestCases/Posix/dlerror.cpp' FAILED ********************
Exit Code: 0

Command Output (stderr):
--
/home/b/sanitizer-aarch64-linux/build/build_default/./bin/clang  --driver-mode=g++   -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta   -gline-tables-only -fsanitize=hwaddress -fuse-ld=lld -mllvm -hwasan-globals -mllvm -hwasan-use-short-granules -mllvm -hwasan-instrument-landing-pads=0 -mllvm -hwasan-instrument-personality-functions -O0 /home/b/sanitizer-aarch64-linux/build/llvm-project/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp -o /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp && HWASAN_OPTIONS=detect_leaks=1  /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp # RUN: at line 4
+ /home/b/sanitizer-aarch64-linux/build/build_default/./bin/clang --driver-mode=g++ -Wthread-safety -Wthread-safety-reference -Wthread-safety-beta -gline-tables-only -fsanitize=hwaddress -fuse-ld=lld -mllvm -hwasan-globals -mllvm -hwasan-use-short-granules -mllvm -hwasan-instrument-landing-pads=0 -mllvm -hwasan-instrument-personality-functions -O0 /home/b/sanitizer-aarch64-linux/build/llvm-project/compiler-rt/test/hwasan/TestCases/Posix/dlerror.cpp -o /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp
+ HWASAN_OPTIONS=detect_leaks=1
+ /home/b/sanitizer-aarch64-linux/build/build_default/runtimes/runtimes-bins/compiler-rt/test/hwasan/AARCH64/TestCases/Posix/Output/dlerror.cpp.tmp

--

********************
Testing:  0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90..

2 warning(s) in tests
Slowest Tests:
--------------------------------------------------------------------------
28.28s: ThreadSanitizer-aarch64 :: bench_threads.cpp
27.25s: ThreadSanitizer-aarch64 :: restore_stack.cpp
20.84s: ThreadSanitizer-aarch64 :: signal_thread.cpp
20.13s: libFuzzer-aarch64-default-Linux :: value-profile-set.test
19.37s: libFuzzer-aarch64-libcxx-Linux :: value-profile-set.test
17.75s: libFuzzer-aarch64-static-libcxx-Linux :: value-profile-set.test
16.74s: HWAddressSanitizer-aarch64 :: TestCases/Linux/create-thread-stress.cpp
16.51s: libFuzzer-aarch64-default-Linux :: value-profile-switch.test
15.46s: libFuzzer-aarch64-default-Linux :: minimize_timeout.test
14.40s: ThreadSanitizer-aarch64 :: compare_exchange_acquire_fence.cpp
13.92s: libFuzzer-aarch64-libcxx-Linux :: value-profile-switch.test
13.84s: Profile-aarch64 :: Posix/instrprof-value-prof-shared.test
12.87s: libFuzzer-aarch64-static-libcxx-Linux :: value-profile-switch.test
12.17s: DataFlowSanitizer-aarch64 :: custom.cpp
11.52s: ThreadSanitizer-aarch64 :: stress.cpp
11.52s: libFuzzer-aarch64-static-libcxx-Linux :: minimize_timeout.test
11.20s: libFuzzer-aarch64-default-Linux :: value-profile-cmp.test
10.67s: AddressSanitizer-Unit :: ./Asan-aarch64-calls-Noinst-Test/AddressSanitizer/ThreadedQuarantineTest
10.54s: libFuzzer-aarch64-default-Linux :: minimize_crash.test
10.50s: libFuzzer-aarch64-static-libcxx-Linux :: minimize_crash.test


rorth pushed a commit to rorth/llvm-project that referenced this pull request Jun 11, 2025
DhruvSrivastavaX pushed a commit to DhruvSrivastavaX/lldb-for-aix that referenced this pull request Jun 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants