v2.1.243 segfaults before main() — bundled allocator interposes glibc free(), crashes in __newlocale (native install, Linux x86-64)

Status Open
Reported on v2.1.241
Maintainer reply None cached
Activity 2 comments · opened Aug 28, 2026

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.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗