Issue |
117476
|
Summary |
[LSAN] macOS: Leak sanitizer hangs or crashes when using with AppKit
|
Labels |
new issue
|
Assignees |
|
Reporter |
madsmtm
|
Building and running the following program under LeakSanitizer on macOS crashes with "bad pointer" on both Aarch64 and x86_64 Rosetta.
```objective-c
// foo.m
#import <AppKit/AppKit.h>
int main() {
[NSApplication sharedApplication];
return 0;
}
```
I tested this in a virtual machine as well, this problem is present in at least macOS 13.7.1, macOS 14.7.1 and macOS 15.1.1.
<details><summary>Full backtrace on macOS 15.1.1 (build 24B91)</summary>
<p>
```console
$ echo """
#import <AppKit/AppKit.h>
int main() {
[NSApplication sharedApplication];
return 0;
}
""" > foo.m
$ /opt/homebrew/opt/llvm/bin/clang -framework AppKit -fsanitize=leak foo.m
$ lldb ./a.out
(lldb) target create "./a.out"
Current executable set to './a.out' (arm64).
(lldb) r
Process 3758 launched: './a.out' (arm64)
a.out(3758,0x1f37a7840) malloc: nano zone abandoned due to inability to reserve vm space.
LeakSanitizer: bad pointer 0x9ce7e5f09a407d7c
LeakSanitizer: CHECK failed: sanitizer_allocator_secondary.h:177 "((IsAligned(reinterpret_cast<uptr>(p), page_size_))) != (0)" (0x0, 0x0) (tid=19136)
Process 3758 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
frame #0: 0x000000018e65a600 libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
-> 0x18e65a600 <+8>: b.lo 0x18e65a620 ; <+40>
0x18e65a604 <+12>: pacibsp
0x18e65a608 <+16>: stp x29, x30, [sp, #-0x10]!
0x18e65a60c <+20>: mov x29, sp
Target 0: (a.out) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
* frame #0: 0x000000018e65a600 libsystem_kernel.dylib`__pthread_kill + 8
frame #1: 0x000000018e692f70 libsystem_pthread.dylib`pthread_kill + 288
frame #2: 0x000000018e59f908 libsystem_c.dylib`abort + 128
frame #3: 0x0000000100199a0c libclang_rt.lsan_osx_dynamic.dylib`__sanitizer::Abort() + 80
frame #4: 0x000000010019904c libclang_rt.lsan_osx_dynamic.dylib`__sanitizer::Die() + 104
frame #5: 0x0000000100199160 libclang_rt.lsan_osx_dynamic.dylib`__sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) + 152
frame #6: 0x00000001001a7e10 libclang_rt.lsan_osx_dynamic.dylib`__sanitizer::CombinedAllocator<__sanitizer::SizeClassAllocator64<__lsan::AP64<__sanitizer::LocalAddressSpaceView>>, __sanitizer::LargeMmapAllocatorPtrArrayDynamic>::GetMetaData(void const*) + 348
frame #7: 0x00000001001a7298 libclang_rt.lsan_osx_dynamic.dylib`__lsan::lsan_mz_size(void const*) + 28
frame #8: 0x000000018e4a29c8 libsystem_malloc.dylib`malloc_size + 124
frame #9: 0x000000018e81d734 CoreFoundation`____CFBinaryPlistCreateObjectFiltered_block_invoke + 192
frame #10: 0x000000018e730820 CoreFoundation`__CFBinaryPlistCreateObjectFiltered + 996
frame #11: 0x000000018e81e020 CoreFoundation`__CFPropertyListCreateFilteredDictionary + 1896
frame #12: 0x000000018e73183c CoreFoundation`__CFBinaryPlistCreateObjectFiltered + 5120
frame #13: 0x000000018e7b7f0c CoreFoundation`_CFPropertyListCreateFiltered + 268
frame #14: 0x000000018e8b4eec CoreFoundation`__CFBundleCreateStringsFromPlistData + 116
frame #15: 0x000000018e8b4ba4 CoreFoundation`_loadStringsFromData + 348
frame #16: 0x000000018e8b43ac CoreFoundation`_loadStringsInOrder + 176
frame #17: 0x000000018e8b28c0 CoreFoundation`_copyStringTable + 848
frame #18: 0x000000018e8b20f0 CoreFoundation`_CFBundleCopyLocalizedStringForLocalizationTableURLAndMarkdownOption + 204
frame #19: 0x000000018e761718 CoreFoundation`_CFCopyLocalizedVersionKey + 196
frame #20: 0x000000018e761420 CoreFoundation`_CFCopyVersionDictionary + 196
frame #21: 0x000000018e76133c CoreFoundation`___CFCopySystemVersionDictionary_block_invoke + 48
frame #22: 0x000000018e4e0658 libdispatch.dylib`_dispatch_client_callout + 20
frame #23: 0x000000018e4e1ea0 libdispatch.dylib`_dispatch_once_callout + 32
frame #24: 0x000000018e761308 CoreFoundation`_CFCopySystemVersionDictionary + 92
frame #25: 0x0000000194173fc0 libMobileGestalt.dylib`___lldb_unnamed_symbol1339 + 52
frame #26: 0x000000019417f2e0 libMobileGestalt.dylib`___lldb_unnamed_symbol1784 + 28
frame #27: 0x000000019418a394 libMobileGestalt.dylib`___lldb_unnamed_symbol2288 + 20
frame #28: 0x00000001941777a0 libMobileGestalt.dylib`___lldb_unnamed_symbol1405 + 516
frame #29: 0x000000019417376c libMobileGestalt.dylib`MGGetBoolAnswer + 36
frame #30: 0x0000000194198360 libMobileGestalt.dylib`___lldb_unnamed_symbol2587 + 64
frame #31: 0x0000000194190190 libMobileGestalt.dylib`___lldb_unnamed_symbol2472 + 120
frame #32: 0x0000000194182b88 libMobileGestalt.dylib`___lldb_unnamed_symbol1943 + 128
frame #33: 0x00000001941776a0 libMobileGestalt.dylib`___lldb_unnamed_symbol1405 + 260
frame #34: 0x000000019297c86c AppKit`__NSUserAccentColorGetHardwareAccentColorName_block_invoke + 196
frame #35: 0x000000018e4e0658 libdispatch.dylib`_dispatch_client_callout + 20
frame #36: 0x000000018e4e1ea0 libdispatch.dylib`_dispatch_once_callout + 32
frame #37: 0x000000019297c9dc AppKit`__NSUserAccentHasHardwareColor_block_invoke + 96
frame #38: 0x000000018e4e0658 libdispatch.dylib`_dispatch_client_callout + 20
frame #39: 0x000000018e4e1ea0 libdispatch.dylib`_dispatch_once_callout + 32
frame #40: 0x000000019227330c AppKit`NSColorGetUserAccentColor + 364
frame #41: 0x0000000192293044 AppKit`+[NSAppearance _aquaAppearance] + 64
frame #42: 0x0000000192271cd0 AppKit`+[NSAppearance appearanceNamed:] + 32
frame #43: 0x0000000192271324 AppKit`-[NSSystemAppearanceProxy init] + 124
frame #44: 0x0000000192271298 AppKit`__38+[NSSystemAppearanceProxy systemProxy]_block_invoke + 24
frame #45: 0x000000018e4e0658 libdispatch.dylib`_dispatch_client_callout + 20
frame #46: 0x000000018e4e1ea0 libdispatch.dylib`_dispatch_once_callout + 32
frame #47: 0x000000019227127c AppKit`+[NSSystemAppearanceProxy systemProxy] + 64
frame #48: 0x0000000192271208 AppKit`-[NSApplication(NSApplicationAppearance_Internal) _registerForAppearanceNotifications] + 32
frame #49: 0x000000019226ee24 AppKit`-[NSApplication init] + 908
frame #50: 0x000000019226e8cc AppKit`+[NSApplication sharedApplication] + 128
frame #51: 0x0000000100003f84 a.out`main + 52
frame #52: 0x000000018e310274 dyld`start + 2840
```
</p>
</details>
The crash seems to be in:
https://github.com/llvm/llvm-project/blob/c4d656a4e992648f3490536336c230041c74dc38/compiler-rt/lib/sanitizer_common/sanitizer_allocator_secondary.h#L175-L178
Clang version: (I'm using the Clang from Homebrew here, because Apple's bundled Clang does not have LeakSanitizer enabled. The problem also reproduces with the Clang from Nixpkgs, and with `rustc`)
```
Homebrew clang version 19.1.4
Target: arm64-apple-darwin24.1.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/19.1.4/bin
Configuration file: /opt/homebrew/etc/clang/arm64-apple-darwin24.cfg
```
Let me know if there's anything else I can do to resolve this!
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs