Skip to content

SIGBUS on uninstall after nixpkgs bump #1288

Description

@grahamc

After bumping nixpkgs, the uninstaller is crashing with a SIGBUS.

The most glaringly notable change between these two versions is the introduction of how Apple SDKs are packaged: NixOS/nixpkgs#346043.

The issue can be reproduced on:

  • MacOS 13.7
  • MacOS 14.6.1
  • MacOS 14.7.1
  • MacOS 15.1

by:

  1. Build nix-installer using a version of Nixpkgs newer than 0.1.698755+rev-807e9154dcb16384b1b765ebe9cd2bba2ac287fd.
  2. Install Nix: ./nix-installer install --no-confirm
  3. Run nix run nixpkgs#hello -- Note: this step is, surprisingly, load bearing!
  4. Uninstall Nix /nix/nix-installer uninstall --no-confirm
  5. Observe the removal pretty much completes, but fails with SIGBUS

Using lldb's bt all, we can see the main thread is using security_framework and rustls_native_certs to get certificates:

  thread #1, name = 'main', queue = �[32m'com.apple.main-thread'�[0m
    frame #0: �[33m0x000000019d256bac�[0m libsystem_kernel.dylib`__ulock_wait + 8
    frame #1: �[33m0x000000019d0e5dd8�[0m libdispatch.dylib`_dlock_wait + 56
    frame #2: �[33m0x000000019d0e5ad4�[0m libdispatch.dylib`_dispatch_wait_on_address + 140
    frame #3: �[33m0x000000019d0e61a4�[0m libdispatch.dylib`_dispatch_group_wait_slow + 56
    frame #4: �[33m0x000000019d0e9394�[0m libdispatch.dylib`dispatch_block_wait + 284
    frame #5: �[33m0x00000001a02deb3c�[0m Security`SecTrustSettingsCopyCertificates + 244
    frame #6: �[33m0x0000000100dca798�[0m ni3`security_framework::trust_settings::TrustSettings::iter::h1edabd8702ce777b + 68
    frame #7: �[33m0x0000000100dbe2b4�[0m ni3`rustls_native_certs::macos::load_native_certs::h046b3ae93eae041c + 648
    frame #8: �[33m0x0000000100db9a68�[0m ni3`rustls_native_certs::load_native_certs::ha1c97d4712715f7a + 208
    frame #9: �[33m0x0000000100d7c29c�[0m ni3`reqwest::async_impl::client::ClientBuilder::build::h24b57e6bfb97b16f + 1756
    frame #10: �[33m0x0000000100285c34�[0m ni3`nix_installer::diagnostics::DiagnosticData::send::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::hb364914f25a07dda + 3752
    frame #11: �[33m0x0000000100284c44�[0m ni3`nix_installer::diagnostics::DiagnosticData::send::_$u7b$$u7b$closure$u7d$$u7d$::hff5a58997e99305b + 1948
    frame #12: �[33m0x0000000100707ea8�[0m ni3`nix_installer::plan::InstallPlan::uninstall::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h938e184001db3b94 + 6056
    frame #13: �[33m0x00000001007065bc�[0m ni3`nix_installer::plan::InstallPlan::uninstall::_$u7b$$u7b$closure$u7d$$u7d$::hdda7160f3391c3bf + 1904
    frame #14: �[33m0x00000001003d077c�[0m ni3`_$LT$nix_installer..cli..subcommand..uninstall..Uninstall$u20$as$u20$nix_installer..cli..CommandExecute$GT$::execute::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h3b36238108552425 + 12048
    frame #15: �[33m0x00000001003cd760�[0m ni3`_$LT$nix_installer..cli..subcommand..uninstall..Uninstall$u20$as$u20$nix_installer..cli..CommandExecute$GT$::execute::_$u7b$$u7b$closure$u7d$$u7d$::he7cc9d2b5388e4aa + 1864
    frame #16: �[33m0x00000001000a69fc�[0m ni3`_$LT$core..pin..Pin$LT$P$GT$$u20$as$u20$core..future..future..Future$GT$::poll::hb5d9d3a651fe56a0 + 80
    frame #17: �[33m0x000000010001e408�[0m ni3`_$LT$nix_installer..cli..NixInstallerCli$u20$as$u20$nix_installer..cli..CommandExecute$GT$::execute::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::ha3702df63c175800 + 2076
    frame #18: �[33m0x000000010001dae8�[0m ni3`_$LT$nix_installer..cli..NixInstallerCli$u20$as$u20$nix_installer..cli..CommandExecute$GT$::execute::_$u7b$$u7b$closure$u7d$$u7d$::ha69d753b591ad6c8 + 1828
    frame #19: �[33m0x00000001000a69fc�[0m ni3`_$LT$core..pin..Pin$LT$P$GT$$u20$as$u20$core..future..future..Future$GT$::poll::hb5d9d3a651fe56a0 + 80
    frame #20: �[33m0x000000010000a2e0�[0m ni3`nix_installer::main::_$u7b$$u7b$closure$u7d$$u7d$::hf64e8abe886930bb + 2052
    frame #21: �[33m0x000000010000a884�[0m ni3`_$LT$tracing..instrument..Instrumented$LT$T$GT$$u20$as$u20$core..future..future..Future$GT$::poll::h1f2de4d21d0f127a + 156
    frame #22: �[33m0x000000010000b828�[0m ni3`tokio::runtime::park::CachedParkThread::block_on::_$u7b$$u7b$closure$u7d$$u7d$::hceb7e219e3e3e8fa + 56
    frame #23: �[33m0x000000010000b650�[0m ni3`tokio::runtime::park::CachedParkThread::block_on::hd1f542ec5fe59355 + 620
    frame #24: �[33m0x000000010000dbb8�[0m ni3`tokio::runtime::context::blocking::BlockingRegionGuard::block_on::h08c8b3ab3b971c54 + 140
    frame #25: �[33m0x000000010000d5c8�[0m ni3`tokio::runtime::scheduler::multi_thread::MultiThread::block_on::_$u7b$$u7b$closure$u7d$$u7d$::hd1d9237916b59e74 + 80
    frame #26: �[33m0x000000010000c3c4�[0m ni3`tokio::runtime::context::runtime::enter_runtime::h838a79fba69916b5 + 256
    frame #27: �[33m0x000000010000d4ec�[0m ni3`tokio::runtime::scheduler::multi_thread::MultiThread::block_on::hda31b1dc81786461 + 92
    frame #28: �[33m0x0000000100003c7c�[0m ni3`tokio::runtime::runtime::Runtime::block_on_inner::he9a2a95b1a4c5786 + 488
    frame #29: �[33m0x0000000100003ea8�[0m ni3`tokio::runtime::runtime::Runtime::block_on::h00b0f355995c909e + 356
    frame #30: �[33m0x00000001000072a4�[0m ni3`nix_installer::main::h160aa3f8fd00d376 + 232
    frame #31: �[33m0x000000010000e278�[0m ni3`core::ops::function::FnOnce::call_once::heb7a104604ebe398 + 20
    frame #32: �[33m0x000000010000e174�[0m ni3`std::sys::backtrace::__rust_begin_short_backtrace::hd16d71321146458a + 24
    frame #33: �[33m0x000000010000e008�[0m ni3`std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h0974c10848d110d0 + 36
    frame #34: �[33m0x00000001012873b4�[0m ni3`std::rt::lang_start_internal::h9e88109c8deb8787 + 808
    frame #35: �[33m0x000000010000dfcc�[0m ni3`std::rt::lang_start::h1f83f9858182f039 + 84
    frame #36: �[33m0x000000010000732c�[0m ni3`main + 36
    frame #37: �[33m0x000000019cf0b154�[0m dyld`start + 2476

...and thread 19 is running in what I think is a Grand Central Dispatch queue to copy_certificates_from_keychain:

* thread #19, queue = �[32m'copy_certificates_from_keychain'�[0m, stop reason = �[31mEXC_BAD_ACCESS (code=10, address=0x106e34000)�[0m
  * frame #0: �[33m0x000000019cf07204�[0m dyld`dyld3::MachOFile::forEachLoadCommand(Diagnostics&, void (load_command const*, bool&) block_pointer) const + 52
    frame #1: �[33m0x000000019cf5cb6c�[0m dyld`dyld3::MachOLoaded::getSlide() const + 148
    frame #2: �[33m0x000000019cf3ced4�[0m dyld`invocation function for block in dyld4::APIs::_dyld_register_func_for_add_image(void (*)(mach_header const*, long)) + 264
    frame #3: �[33m0x000000019cf1277c�[0m dyld`dyld4::RuntimeLocks::withLoadersReadLock(void () block_pointer) + 100
    frame #4: �[33m0x000000019cf3c918�[0m dyld`dyld4::APIs::_dyld_register_func_for_add_image(void (*)(mach_header const*, long)) + 156
    frame #5: �[33m0x000000019cfe0d50�[0m libsystem_trace.dylib`_os_trace_init_slow + 616
    frame #6: �[33m0x000000019d0e53e8�[0m libdispatch.dylib`_dispatch_client_callout + 20
    frame #7: �[33m0x000000019d0e6c68�[0m libdispatch.dylib`_dispatch_once_callout + 32
    frame #8: �[33m0x000000019cfe2f30�[0m libsystem_trace.dylib`os_log_create + 856
    frame #9: �[33m0x00000001a033ba24�[0m Security`__secLogObjForCFScope_block_invoke + 40
    frame #10: �[33m0x00000001a033b9c8�[0m Security`secLogObjForCFScope + 272
    frame #11: �[33m0x00000001a033bb90�[0m Security`secLogObjForScope + 108
    frame #12: �[33m0x00000001a00d6578�[0m Security`___SecTrustSettingsUseXPCEnabled_block_invoke + 76
    frame #13: �[33m0x000000019d0e53e8�[0m libdispatch.dylib`_dispatch_client_callout + 20
    frame #14: �[33m0x000000019d0e6c68�[0m libdispatch.dylib`_dispatch_once_callout + 32
    frame #15: �[33m0x00000001a02ed7f4�[0m Security`Security::KeychainCore::TrustSettings::CreateTrustSettings(SecTrustSettingsDomain, bool, bool, Security::KeychainCore::TrustSettings*&) + 976
    frame #16: �[33m0x00000001a02decb4�[0m Security`__SecTrustSettingsCopyCertificates_block_invoke_2 + 96
    frame #17: �[33m0x000000019d0f4470�[0m libdispatch.dylib`_dispatch_block_async_invoke2 + 148
    frame #18: �[33m0x000000019d0e53e8�[0m libdispatch.dylib`_dispatch_client_callout + 20
    frame #19: �[33m0x000000019d0eca14�[0m libdispatch.dylib`_dispatch_lane_serial_drain + 748
    frame #20: �[33m0x000000019d0ed544�[0m libdispatch.dylib`_dispatch_lane_invoke + 380
    frame #21: �[33m0x000000019d0f82d0�[0m libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh + 288
    frame #22: �[33m0x000000019d0f7b44�[0m libdispatch.dylib`_dispatch_workloop_worker_thread + 404
    frame #23: �[33m0x000000019d29200c�[0m libsystem_pthread.dylib`_pthread_wqthread + 288

full session:
btall.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions