diff options
author | Vitaly Buka <vitalybuka@google.com> | 2023-12-13 14:49:18 -0800 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2023-12-13 14:49:18 -0800 |
commit | 4d81ef26367fc6745bb3a8eac4fee9d213c2b7c6 (patch) | |
tree | ca3770068d424f8b77795bfe546ed18b367e742a | |
parent | 192840113a84ea2b062a77bbdf4aa0de1cabf80f (diff) |
[𝘀𝗽𝗿] changes to main this commit is based onupstream/users/vitalybuka/spr/main.msan-use-pthread_atfork-instead-of-interceptor
Created using spr 1.3.4
[skip ci]
-rw-r--r-- | compiler-rt/lib/hwasan/hwasan_linux.cpp | 16 | ||||
-rw-r--r-- | compiler-rt/lib/hwasan/hwasan_thread.cpp | 1 | ||||
-rw-r--r-- | compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c | 2 |
3 files changed, 15 insertions, 4 deletions
diff --git a/compiler-rt/lib/hwasan/hwasan_linux.cpp b/compiler-rt/lib/hwasan/hwasan_linux.cpp index f01fa4276413..3271a955e7ed 100644 --- a/compiler-rt/lib/hwasan/hwasan_linux.cpp +++ b/compiler-rt/lib/hwasan/hwasan_linux.cpp @@ -523,12 +523,24 @@ uptr TagMemoryAligned(uptr p, uptr size, tag_t tag) { void HwasanInstallAtForkHandler() { auto before = []() { - HwasanAllocatorLock(); + if (CAN_SANITIZE_LEAKS) { + __lsan::LockGlobal(); + } + // `_lsan` functions defined regardless of `CAN_SANITIZE_LEAKS` and lock the + // stuff we need. + __lsan::LockThreads(); + __lsan::LockAllocator(); StackDepotLockAll(); }; auto after = []() { StackDepotUnlockAll(); - HwasanAllocatorUnlock(); + // `_lsan` functions defined regardless of `CAN_SANITIZE_LEAKS` and unlock + // the stuff we need. + __lsan::UnlockAllocator(); + __lsan::UnlockThreads(); + if (CAN_SANITIZE_LEAKS) { + __lsan::UnlockGlobal(); + } }; pthread_atfork(before, after, after); } diff --git a/compiler-rt/lib/hwasan/hwasan_thread.cpp b/compiler-rt/lib/hwasan/hwasan_thread.cpp index ce36547580e6..3e14a718513d 100644 --- a/compiler-rt/lib/hwasan/hwasan_thread.cpp +++ b/compiler-rt/lib/hwasan/hwasan_thread.cpp @@ -68,6 +68,7 @@ void Thread::Init(uptr stack_buffer_start, uptr stack_buffer_size, } Print("Creating : "); } + ClearShadowForThreadStackAndTLS(); } void Thread::InitStackRingBuffer(uptr stack_buffer_start, diff --git a/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c b/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c index 673d35346ba8..1b4a0ad6140d 100644 --- a/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c +++ b/compiler-rt/test/sanitizer_common/TestCases/Posix/fork_threaded.c @@ -1,7 +1,5 @@ // RUN: %clang -O0 %s -o %t && %env_tool_opts=die_after_fork=0 %run %t -// UNSUPPORTED: hwasan - // The test uses pthread barriers which are not available on Darwin. // UNSUPPORTED: darwin |