Skip to content

Node.js v24.14.0 (linux-arm64) crashes with heap memory corruption / double free or corruption (out) on aarch64 — possible allocator bug in ARM64 build #62253

@Latebloomingcrabapple

Description

@Latebloomingcrabapple

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

  1. Install node-v24.14.0-linux-arm64 on an aarch64 Linux machine.
  2. Create a minimal Node.js project:
    mkdir test-crash && cd test-crash
    npm init -y
    npm install express   # or any package with native deps
  3. Run any script:
    node index.js
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs more infoIssues without a valid reproduction.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions