[PATCH] D33325: [asan] Avoid possible deadlock in child process after fork

Maxim Ostapenko via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 19 07:22:24 PDT 2017


m.ostapenko updated this revision to Diff 99565.
m.ostapenko added a comment.

Updating. When adapting test/msan/fork.cc for ASan I've noticed that deadlock can also happen if the whole allocator is locked when we calling fork. Corresponding backtrace looks like this:

  #0  atomic_exchange<__sanitizer::atomic_uint32_t> () at /home/max/src/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_atomic_clang.h:68
  #1  Lock () at /home/max/src/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc:541
  #2  0x000000000041e9f9 in GenericScopedLock () at /home/max/src/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_mutex.h:187
  #3  GetFromAllocator () at /home/max/src/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_allocator_primary64.h:134
  #4  0x000000000041e99b in Refill () at /home/max/src/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_allocator_local_cache.h:108
  #5  0x000000000041e550 in Allocate () at /home/max/src/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_allocator_local_cache.h:50
  #6  0x000000000041e443 in Allocate () at /home/max/src/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_allocator_combined.h:68
  #7  0x000000000041b6cb in Allocate () at /home/max/src/llvm/projects/compiler-rt/lib/asan/asan_allocator.cc:407
  #8  0x00000000004b9148 in __interceptor_malloc () at /home/max/src/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:67
  #9  0x00000000004e878d in child () at fork.cc:47
  #10 0x00000000004e8968 in test () at fork.cc:67
  #11 0x00000000004e8a38 in main () at fork.cc:78

Thus we need to lock allocator as well.


Repository:
  rL LLVM

https://reviews.llvm.org/D33325

Files:
  lib/asan/asan_allocator.cc
  lib/asan/asan_allocator.h
  lib/asan/asan_interceptors.cc
  test/asan/TestCases/Linux/fork.cc

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33325.99565.patch
Type: text/x-patch
Size: 4506 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170519/8cdeb1e3/attachment.bin>


More information about the llvm-commits mailing list