When building a certain very large Nix closure. I encounter a segfault in boehm-gc.
I only have this problem in Nix 2.13, but not in Nix 2.12. I have further bisected the segfault to this commit in Nix which upgrades to use nixpkgs 22.11: 9c90452
#0 0x00007ffff7b6a510 in GC_push_all_eager () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#1 0x00007ffff7b70b17 in GC_default_push_other_roots () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#2 0x00007ffff7b69af4 in GC_mark_some () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#3 0x00007ffff7b6d5bd in GC_stopped_mark () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#4 0x00007ffff7b6e214 in GC_try_to_collect_inner () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#5 0x00007ffff7b6e44e in GC_collect_or_expand () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#6 0x00007ffff7b70079 in GC_generic_malloc_inner () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#7 0x00007ffff7b74137 in GC_generic_malloc_many () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#8 0x00007ffff7b74312 in GC_malloc_kind () from /nix/store/x42zqs79lkyi88k1nj4x0bp15jpvwq2v-boehm-gc-8.2.2/lib/libgc.so.1
#9 0x00007ffff7d6e0cf in nix::Value::mkString(std::basic_string_view<char, std::char_traits<char> >) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#10 0x00007ffff7e300f5 in nix::prim_attrNames(nix::EvalState&, nix::PosIdx, nix::Value**, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#11 0x00007ffff7d7affa in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#12 0x00007ffff7d7c0cb in nix::ExprCall::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#13 0x00007ffff7e2f16b in nix::prim_foldlStrict(nix::EvalState&, nix::PosIdx, nix::Value**, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#14 0x00007ffff7d7affa in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#15 0x00007ffff7d7c0cb in nix::ExprCall::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#16 0x00007ffff7d7aeec in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#17 0x00007ffff7d7c0cb in nix::ExprCall::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#18 0x000000000057802d in void nix::EvalState::forceValue<nix::EvalState::forceValue(nix::Value&, nix::PosIdx)::{lambda()#1}>(nix::Value&, nix::EvalState::forceValue(nix::Value&, nix::PosIdx)::{lambda()#1}) ()
#19 0x00007ffff7e3d3eb in nix::prim_genericClosure(nix::EvalState&, nix::PosIdx, nix::Value**, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#20 0x00007ffff7d7affa in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#21 0x00007ffff7d7c0cb in nix::ExprCall::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#22 0x00007ffff7e2f16b in nix::prim_foldlStrict(nix::EvalState&, nix::PosIdx, nix::Value**, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#23 0x00007ffff7d7affa in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#24 0x00007ffff7d7c0cb in nix::ExprCall::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#25 0x000000000057802d in void nix::EvalState::forceValue<nix::EvalState::forceValue(nix::Value&, nix::PosIdx)::{lambda()#1}>(nix::Value&, nix::EvalState::forceValue(nix::Value&, nix::PosIdx)::{lambda()#1}) ()
#26 0x00007ffff7d80bf5 in nix::ExprVar::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#27 0x00007ffff7d7aeec in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#28 0x00007ffff7d7c0cb in nix::ExprCall::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#29 0x00007ffff7e3283b in nix::prim_hasAttr(nix::EvalState&, nix::PosIdx, nix::Value**, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#30 0x00007ffff7d7affa in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#31 0x00007ffff7d7c0cb in nix::ExprCall::eval(nix::EvalState&, nix::Env&, nix::Value&) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#32 0x00007ffff7d7aeec in nix::EvalState::callFunction(nix::Value&, unsigned long, nix::Value**, nix::Value&, nix::PosIdx) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#33 0x00007ffff7e26a9a in std::_Function_handler<bool (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), nix::addPath(nix::EvalState&, nix::PosIdx, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, nix::Value*, nix::FileIngestionMethod, std::optional<nix::Hash>, nix::Value&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}>::_M_invoke(std::_Any_data const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixexpr.so
#34 0x00007ffff74f9057 in nix::dump(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, nix::Sink&, std::function<bool (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&) () from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixutil.so
#35 0x00007ffff75750b4 in void boost::context::detail::fiber_entry<boost::context::detail::fiber_record<boost::context::fiber, nix::VirtualStackAllocator, boost::coroutines2::detail::pull_coroutine<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::control_block::control_block<nix::VirtualStackAllocator, nix::sinkToSource(std::function<void (nix::Sink&)>, std::function<void ()>)::SinkToSource::read(char*, unsigned long)::{lambda(boost::coroutines2::detail::push_coroutine<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&)#1}>(boost::context::preallocated, nix::VirtualStackAllocator&&, nix::sinkToSource(std::function<void (nix::Sink&)>, std::function<void ()>)::SinkToSource::read(char*, unsigned long)::{lambda(boost::coroutines2::detail::push_coroutine<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&)#1}&&)::{lambda(boost::context::fiber&&)#1}> >(boost::context::detail::transfer_t) ()
from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libnixutil.so
#36 0x00007ffff6e9b18f in make_fcontext () from /nix/store/2pf95p0wbidrwfl15s1mg88i8y78vg7y-nix-2.12.0pre20221129_9c90452/lib/libboost_context.so.1.79.0
#37 0x0000000000000000 in ?? ()
I'm currently working to find a more minimal reproducing example that I can share. I'm running on x86_64-linux.
Nix to not segfault.
Describe the bug
When building a certain very large Nix closure. I encounter a segfault in boehm-gc.
I only have this problem in Nix 2.13, but not in Nix 2.12. I have further bisected the segfault to this commit in Nix which upgrades to use nixpkgs 22.11: 9c90452
Backtrace:
Steps To Reproduce
I'm currently working to find a more minimal reproducing example that I can share. I'm running on
x86_64-linux.Expected behavior
Nix to not segfault.
nix-env --versionoutputnix-env (Nix) 2.13.1
x86_64-linux