https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96332
Bug ID: 96332 Summary: Asan (libasan) deadlock inside a malloc Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libgcc Assignee: unassigned at gcc dot gnu.org Reporter: raster at rasterman dot com Target Milestone: --- I noticed this in 10.0.0 as well, just updated to 10.1 and still there. Specific version + build info: COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/10.1.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++,d --with-isl --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-install-libiberty --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-libunwind-exceptions --disable-werror gdc_include_dir=/usr/include/dlang/gdc Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 10.1.0 (GCC) This happens every time for me when I use asan to build efl + enlightenment (http://www.enlightenment.org). Asan used to work fine in gcc 9. I get a deadlock inside libasan inside opendir inside an malloc: #0 __sanitizer::atomic_exchange<__sanitizer::atomic_uint32_t>(__sanitizer::atomic_uint32_t volatile*, __sanitizer::atomic_uint32_t::Type, __sanitizer::memory_order) (mo=__sanitizer::memory_order_acquire, v=2, a=0x6400000021c0) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_atomic_clang.h:62 #1 __sanitizer::BlockingMutex::Lock() (this=this@entry=0x6400000021c0) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp:652 #2 0x00007fddad443d68 in __sanitizer::GenericScopedLock<__sanitizer::BlockingMutex>::GenericScopedLock(__sanitizer::BlockingMutex*) (mu=0x6400000021c0, this=<synthetic pointer>) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_mutex.h:181 #3 __sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> >::GetFromAllocator(__sanitizer::AllocatorStats*, unsigned long, unsigned int*, unsigned long) (this=0x7fddad54a9c0 <__asan::instance>, this@entry=0x7fdda894c7b0, stat=stat@entry=0x7fdda894ec40, class_id=class_id@entry=45, chunks=chunks@entry=0x7fdda894c7c0, n_chunks=n_chunks@entry=1) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h:142 #4 0x00007fddad443e85 in __sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> > >::Refill(__sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__saniti--Type <RET> for more, q to--Type <RET> for more, q to---Type <RET> for more, q to quit, c to continue without paging-- ned long) (this=this@entry=0x7fdda89410e0, c=c@entry=0x7fdda894c7b0, allocator=allocator@entry=0x7fdda894c7b0, class_id=class_id@entry=45) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_local_cache.h:86 #5 0x00007fddad444179 in __sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> > >::Allocate(__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> >*, unsigned long) (class_id=45, allocator=0x7fdda894c7b0, this=0x7fdda89410e0) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_local_cache.h:33 #6 __sanitizer::CombinedAllocator<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> >, __sanitizer::LargeMmapAllocatorPtrArrayDynamic>::Allocate(__sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> > >*, unsigned long, unsigned long) (this=this@entry=0x7fddad54a9c0 <__asan::instance>, cache=cache@entry=0x7fdda89410e0, size=<optimized out>, size@entry=33840, alignment=alignment@entry=8) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_combined.h:69 #7 0x00007fddad44435a in __asan::Allocator::Allocate(unsigned long, unsigned long, __sanitizer::BufferedStackTrace*, __asan::AllocType, bool) (this=this@entry=0x7fddad54a9c0 <__asan::instance>, size=size@entry=32816, alignment=alignment@entry=8, stack=stack@entry=0x7ffef49ca810, alloc_type=alloc_type@entry=__asan::FROM_MALLOC, can_fill=can_fill@entry=true) at /build/gcc/src/gcc/libsanitizer/asan/asan_allocator.cpp:469 #8 0x00007fddad440f5b in __asan::asan_malloc(unsigned long, __sanitizer::BufferedStackTrace*) (size=size@entry=32816, stack=stack@entry=0x7ffef49ca810) at /build/gcc/src/gcc/libsanitizer/asan/asan_allocator.cpp:892 #9 0x00007fddad4cc436 in __interceptor_malloc(__sanitizer::uptr) (size=32816) at /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:146 #10 0x00007fddaab98f6b in __alloc_dir () at /usr/lib/libc.so.6 #11 0x00007fddaab9907a in opendir_tail () at /usr/lib/libc.so.6 #12 0x00007fddad258074 in eina_file_close_from (fd=3, except_fd=0x7ffef49cb340) at ../src/lib/eina/eina_file.c:1264 #13 0x00007fddacfd5d38 in _impl_ecore_exe_efl_object_finalize (obj=0x400000029e0b, exe=0x61200017c7c8) at ../src/lib/ecore/ecore_exe_posix.c:372 #14 0x00007fddacfaed48 in _ecore_exe_efl_object_finalize (obj=0x400000029e0b, exe=0x61200017c7c8) at ../src/lib/ecore/ecore_exe.c:101 #15 0x00007fddaa3a88e7 in efl_finalize (obj=0x400000029e0b) at src/lib/eo/efl_object.eo.c:161 #16 0x00007fddaa380666 in _efl_add_end (eo_id=0x400000029e0b, is_ref=0 '\000', is_fallback=0 '\000') at ../src/lib/eo/eo.c:1152 #17 0x00007fddacfaeae5 in ecore_exe_pipe_run (exe_cmd=0x7ffef49cc620 "xrdb -load /home/raster/.Xdefaults", flags=ECORE_EXE_NONE, data=0x0) at ../src/lib/ecore/ecore_exe.c:69 #18 0x00007fddacfaea6f in ecore_exe_run (exe_cmd=0x7ffef49cc620 "xrdb -load /home/raster/.Xdefaults", data=0x0) at ../src/lib/ecore/ecore_exe.c:60 #19 0x000055fd47877abc in e_deskenv_init () at ../src/bin/e_deskenv.c:17 #20 0x000055fd479e79f4 in main (argc=1, argv=0x7ffef4a08708) at ../src/bin/e_main.c:1019 (gdb) bt #0 __sanitizer::atomic_exchange<__sanitizer::atomic_uint32_t>(__sanitizer::atomic_uint32_t volatile*, __sanitizer::atomic_uint32_t::Type, __sanitizer::memory_order) (mo=__sanitizer::memory_order_acquire, v=2, a=0x6400000021c0) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_atomic_clang.h:62 #1 __sanitizer::BlockingMutex::Lock() (this=this@entry=0x6400000021c0) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cpp:652 #2 0x00007fddad443d68 in __sanitizer::GenericScopedLock<__sanitizer::BlockingMutex>::GenericScopedLock(__sanitizer::BlockingMutex*) (mu=0x6400000021c0, this=<synthetic pointer>) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_mutex.h:181 #3 __sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> >::GetFromAllocator(__sanitizer::AllocatorStats*, unsigned long, unsigned int*, unsigned long) (this=0x7fddad54a9c0 <__asan::instance>, this@entry=0x7fdda894c7b0, stat=stat@entry=0x7fdda894ec40, class_id=class_id@entry=45, chunks=chunks@entry=0x7fdda894c7c0, n_chunks=n_chunks@entry=1) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_primary64.h:142 #4 0x00007fddad443e85 in __sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> > >::Refill(__sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> > >::PerClass*, __sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> >*, unsigned long) (this=this@entry=0x7fdda89410e0, c=c@entry=0x7fdda894c7b0, allocator=allocator@entry=0x7fdda894c7b0, class_id=class_id@entry=45) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_local_cache.h:86 #5 0x00007fddad444179 in __sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> > >::Allocate(__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> >*, unsigned long) (class_id=45, allocator=0x7fdda894c7b0, this=0x7fdda89410e0) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_local_cache.h:33 #6 __sanitizer::CombinedAllocator<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> >, __sanitizer::LargeMmapAllocatorPtrArrayDynamic>::Allocate(__sanitizer::SizeClassAllocator64LocalCache<__sanitizer::SizeClassAllocator64<__asan::AP64<__sanitizer::LocalAddressSpaceView> > >*, unsigned long, unsigned long) (this=this@entry=0x7fddad54a9c0 <__asan::instance>, cache=cache@entry=0x7fdda89410e0, size=<optimized out>, size@entry=33840, alignment=alignment@entry=8) at /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_allocator_combined.h:69 #7 0x00007fddad44435a in __asan::Allocator::Allocate(unsigned long, unsigned long, __sanitizer::BufferedStackTrace*, __asan::AllocType, bool) (this=this@entry=0x7fddad54a9c0 <__asan::instance>, size=size@entry=32816, alignment=alignment@entry=8, stack=stack@entry=0x7ffef49ca810, alloc_type=alloc_type@entry=__asan::FROM_MALLOC, can_fill=can_fill@entry=true) at /build/gcc/src/gcc/libsanitizer/asan/asan_allocator.cpp:469 #8 0x00007fddad440f5b in __asan::asan_malloc(unsigned long, __sanitizer::BufferedStackTrace*) (size=size@entry=32816, stack=stack@entry=0x7ffef49ca810) at /build/gcc/src/gcc/libsanitizer/asan/asan_allocator.cpp:892 #9 0x00007fddad4cc436 in __interceptor_malloc(__sanitizer::uptr) (size=32816) at /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:146 #10 0x00007fddaab98f6b in __alloc_dir () at /usr/lib/libc.so.6 #11 0x00007fddaab9907a in opendir_tail () at /usr/lib/libc.so.6 #12 0x00007fddad258074 in eina_file_close_from (fd=3, except_fd=0x7ffef49cb340) at ../src/lib/eina/eina_file.c:1264 #13 0x00007fddacfd5d38 in _impl_ecore_exe_efl_object_finalize (obj=0x400000029e0b, exe=0x61200017c7c8) at ../src/lib/ecore/ecore_exe_posix.c:372 #14 0x00007fddacfaed48 in _ecore_exe_efl_object_finalize (obj=0x400000029e0b, exe=0x61200017c7c8) at ../src/lib/ecore/ecore_exe.c:101 #15 0x00007fddaa3a88e7 in efl_finalize (obj=0x400000029e0b) at src/lib/eo/efl_object.eo.c:161 #16 0x00007fddaa380666 in _efl_add_end (eo_id=0x400000029e0b, is_ref=0 '\000', is_fallback=0 '\000') at ../src/lib/eo/eo.c:1152 #17 0x00007fddacfaeae5 in ecore_exe_pipe_run (exe_cmd=0x7ffef49cc620 "xrdb -load /home/raster/.Xdefaults", flags=ECORE_EXE_NONE, data=0x0) at ../src/lib/ecore/ecore_exe.c:69 #18 0x00007fddacfaea6f in ecore_exe_run (exe_cmd=0x7ffef49cc620 "xrdb -load /home/raster/.Xdefaults", data=0x0) at ../src/lib/ecore/ecore_exe.c:60 #19 0x000055fd47877abc in e_deskenv_init () at ../src/bin/e_deskenv.c:17 #20 0x000055fd479e79f4 in main (argc=1, argv=0x7ffef4a08708) at ../src/bin/e_main.c:1019 Of course reproducing this is going to be much harder as you need to build efl+e with asan then have a ~/.Xdefaults file for it to load (run xrdb) and actually do a login and have it hang during login... I am currently building gcc git to see if it's still there, but it's taking a while.