[libunwind] [compiler-rt] [mlir] [llvm] [lld] [flang] [lldb] [libcxx] [libcxxabi] [clang] [libc] [clang-tools-extra] [asan] Install `pthread_atfork` (PR #75290)

Rainer Orth via cfe-commits cfe-commits at lists.llvm.org
Fri Dec 15 01:23:26 PST 2023


rorth wrote:

Since this patch, all asan tests loop on Solaris.  This had been hidden for a bit by an unrelated extended build breakage on the bots, but now every `ninja check-all` on the Solaris/amd64 bot times out.  I could trace this to this patch.

E.g. when running `projects/compiler-rt/test/asan/I386SunOSConfig/TestCases/Output/alloca_big_alignment.cpp.tmp`, I get the expected output
```
=================================================================
==22223==ERROR: AddressSanitizer: dynamic-stack-buffer-overflow on address 0xfeffd88a at pc 0x0812907d bp 0xfeffd7f4 sp 0xfeffd7ec
WRITE of size 1 at 0xfeffd88a thread T0
```
and afterwards the test loops.  `truss` shows an unending series of
```
22210:	yield()						= 0
22210:	yield()						= 0
22210:	yield()						= 0
```
and `pstack` gives
```
22213:	/var/llvm/local-amd64-release-stage2-A-flang-492214/tools/clang/stage2
 fdfbebc5 yield    (0x8139158, 0x8109558, 0x818a580, 0x0, 0x5dd, 0x8139158) + 15
 0810cd32 __sanitizer::FutexWait(__sanitizer::atomic_uint32_t*, unsigned int) (0xfe00a000, 0xfdebdd56, 0x805ad7c, 0xfdfa0107, 0xfeffc68c, 0x5) + 12
 080f4952 __asan::InstallAtForkHandler()::$_0::__invoke() (0xfde26fc0, 0x7, 0xfe010200, 0xfe010140, 0x7, 0x5) + 12
 fdfa49c8 forkx    (0x0, 0xfe5ad000, 0x89f, 0xfdfa4b8c) + c8
 fdfa4b9d fork     (0x8139158, 0x811563e, 0xfeffc720, 0xfd6007a0, 0x4, 0x8139158) + 1d
 0810ccd2 __sanitizer::internal_fork() () + 12
```
This seems no wonder given that `sanitizer_common/sanitizer_solaris.cpp` has
```
void FutexWait(atomic_uint32_t *p, u32 cmp) {
  // FIXME: implement actual blocking.
  sched_yield();
}
```
`sanitizer_mac.cpp` is the same, btw., and even `sanitizer_linux.cpp` has
```
#  if !SANITIZER_SOLARIS
void FutexWait(atomic_uint32_t *p, u32 cmp) {
#    if SANITIZER_FREEBSD
  _umtx_op(p, UMTX_OP_WAIT_UINT, cmp, 0, 0);
#    elif SANITIZER_NETBSD
  sched_yield(); /* No userspace futex-like synchronization */
#    else
  internal_syscall(SYSCALL(futex), (uptr)p, FUTEX_WAIT_PRIVATE, cmp, 0, 0, 0);
#    endif
}
```
so even NetBSD would be affected.

https://github.com/llvm/llvm-project/pull/75290


More information about the cfe-commits mailing list