-
-
Notifications
You must be signed in to change notification settings - Fork 35.1k
Description
Body:
Environment
| Field | Value |
|---|---|
| Node.js version | v24.14.0 |
| OS / Arch | Linux aarch64 |
| Package | node-v24.14.0-linux-arm64 |
| libc | glibc (system default on aarch64) |
Description
On aarch64 Linux, Node.js v24.14.0 (linux-arm64 build) consistently produces a fatal heap memory error at runtime:
double free or corruption (out)
Aborted (core dumped)
This is not isolated to a specific user-space package or application — the crash occurs across multiple unrelated Node.js projects, suggesting the root cause lies within the Node.js runtime itself (V8 heap, libuv, or the bundled memory allocator) rather than in application-level code.
The error pattern — double free or corruption (out) — is characteristic of a heap allocator violation, where a memory region is freed more than once or a write overflows a heap chunk boundary. On ARM64, this class of bug is sometimes triggered by alignment assumptions or allocator behavior that differs from x86_64.
Steps to Reproduce
- Install
node-v24.14.0-linux-arm64on an aarch64 Linux machine. - Create a minimal Node.js project:
mkdir test-crash && cd test-crash npm init -y npm install express # or any package with native deps
- Run any script:
node index.js
- Observe crash:
double free or corruption (out) Aborted (core dumped)
Expected Behavior
Node.js v24.14.0 on linux-arm64 should run stably without heap corruption errors under normal workloads.
Actual Behavior
The process aborts with a double free or corruption (out) signal on aarch64. The crash is:
- Consistent — reproducible across multiple projects and invocations.
- Architecture-specific — behavior has not been observed on x86_64 with the same Node.js version.
- Not application-specific — occurs regardless of which Node.js project is run.
Suspected Root Cause
This crash pattern is consistent with one or more of the following:
- V8's heap allocator making unsafe memory assumptions specific to ARM64 pointer or alignment behavior.
- A regression in libuv on the aarch64 build introduced in v24.x.
- The bundled tcmalloc / partition allocator exhibiting undefined behavior under aarch64's memory model (e.g., related to LSE atomics or 16KB page size on certain ARM64 kernels).
- Possible glibc version mismatch between the build environment and the target system.
Additional Context
- No crash occurs when the npm cache is cleared before each run (
npm cache clean --force), which suggests a corrupted or misaligned memory state may be accumulating across processes, possibly via shared memory segments or cache-related file I/O on arm64. - A stack trace / core dump analysis would be highly valuable — willing to provide one if guidance on capturing it is given.
- Suggested next step: compare the arm64 allocator path in V8 between v22.x (LTS) and v24.x to identify any behavioral change on aarch64.
Is this a regression?
Unknown — this is the first version of Node.js tested on this aarch64 machine. Testing against Node.js v22.x (LTS) on the same system would help confirm whether this is a v24-specific regression.