v2.1.243 segfaults before main() — bundled allocator interposes glibc free(), crashes in __newlocale (native install, Linux x86-64)
Summary
The auto-updater installed v2.1.243, after which every claude launch dies
with SIGSEGV before printing anything. v2.1.241 runs fine on the identical
system. The core dump shows the crash is an allocator-interposition bug in
the 2.1.243 build.
### Environment
- OS: Manjaro Linux, kernel 6.12.104-1-MANJARO, x86-64
- Install type: native installer (
~/.local/share/claude/versions/) - Broken: 2.1.243 (auto-installed 2026-08-25 01:53, first observed 2026-08-28)
- Working: 2.1.241 (installed 2026-08-24 11:53)
- glibc 2.44+r24+g16be1518495f-1, gcc-libs 16.2.1+r23+gd564253eb6c8-1
### Reproduction
100% reproducible; --version is enough — no config, no TUI:
$ ~/.local/share/claude/versions/2.1.243 --version
Segmentation fault (core dumped)
$ ~/.local/share/claude/versions/2.1.241 --version
2.1.241 (Claude Code)
### Stack trace
#0 0x0000000001d10458 free (2.1.243 + 0x1b10458)
#1 0x00007f5d2063530a __newlocale (libc.so.6 + 0x3530a)
#2 0x0000000001abd282 n/a (2.1.243 + 0x18bd282)
#3 0x00007f5d2069d7fc n/a (libc.so.6 + 0x9d7fc)
#4 0x00007f5d2069d879 pthread_once (libc.so.6 + 0x9d879)
#5 0x0000000001abc2d2 n/a (2.1.243 + 0x18bc2d2)
#6 0x0000000001ace6cf n/a (2.1.243 + 0x18ce6cf)
#7 0x0000000001abdc0a n/a (2.1.243 + 0x18bdc0a)
#8 0x0000000001abe9c4 n/a (2.1.243 + 0x18be9c4)
#9 0x00007f5d2069d7fc n/a (libc.so.6 + 0x9d7fc)
#10 0x00007f5d2069d879 pthread_once (libc.so.6 + 0x9d879)
#11 0x0000000001abea15 n/a (2.1.243 + 0x18bea15)
#12 0x0000000001abead7 n/a (2.1.243 + 0x18bead7)
#13 0x0000000001abb922 n/a (2.1.243 + 0x18bb922)
#14 0x0000000001abb724 n/a (2.1.243 + 0x18bb724)
#15 0x0000000001aadadd n/a (2.1.243 + 0x18adadd)
#16 0x00007f5d20627892 __libc_start_main (libc.so.6 + 0x27892)
#17 0x0000000001953a2e n/a (2.1.243 + 0x1753a2e)
### Analysis
Frame #0 shows free resolving to an address inside the binary
(2.1.243 + 0x1b10458), not to libc — the bundled allocator is exported
with global visibility and interposes glibc's free. In frame #1, glibc's
__newlocale releases a buffer allocated by glibc's own malloc, but the
call is captured by the bundled allocator, which faults on a pointer from
a heap it does not manage.
This runs under pthread_once-guarded static initialization (#4, #10),
i.e. before main — hence zero output even for --version.
Suggested fix: build the bundled allocator with hidden visibility (or stop
exporting malloc/free/realloc) so glibc-internal allocations stay
paired with glibc's allocator.
### Ruled out
- Truncated download — 377,568,472 bytes, plausible for a full build.
- glibc/gcc-libs upgrade (2026-08-24 12:15) — 2.1.241 launches
correctly against the same upgraded libraries.
- Config/state — crash occurs on
--version, before config is read. - Shell/PATH — invoking the versioned binary by absolute path crashes
identically.
### Workaround
ln -sfn ~/.local/share/claude/versions/2.1.241 ~/.local/bin/claude
Note the auto-updater reverts this on its next run, re-breaking the CLI.
### Additional data
Core dump retained (70.7 MB, coredumpctl PID 307597), as is the 2.1.243
binary. Both available on request.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗