#34857·cypress

Cypress 15.21.1 binary crashes with SIGILL (invalid opcode) at a fixed offset on WSL2/WSLg

Author: robertmartin15Created Sep 15, 2026Updated Sep 15, 2026

Current behavior

The Cypress binary (Electron 37.6.0) repeatedly crashes with SIGILL (signal 4, invalid opcode) when running on WSL2 with WSLg. It happened 10 times within ~24 hours (2026-09-14 13:15 – 2026-09-15 12:23).

The crash is deterministic in location: every time the trap is at the same offset in the Cypress executable (0x4a83146), across different PIDs and ASLR base addresses. This points to an intentional abort (CHECK() / IMMEDIATE_CRASH()) in Chromium/Electron, not to a CPU incompatibility (the CPU supports AVX2).

Kernel log (dmesg) from two of the crashes:

[ 7215.487754] traps: Cypress[2637] trap invalid opcode ip:58fc54b9a146 sp:7ffc4d869da0 error:0 in Cypress[4a83146,58fc52861000+92d3000]
[ 7215.487988] Cypress: Cypress: potentially unexpected fatal signal 4.
[ 7215.488355] CPU: 10 UID: 0 PID: 2637 Comm: Cypress Not tainted 6.18.33.2-microsoft-standard-WSL2 #1 PREEMPT(none)
[ 7215.492079] WSL (2645 - CaptureCrash): Capturing crash for pid: 30861, executable: !root!.cache!Cypress!15.21.1!Cypress!Cypress, signal: 4, port: 50005

[ 8937.271931] traps: Cypress[21391] trap invalid opcode ip:5ac44a188146 sp:7ffc9605cf00 error:0 in Cypress[4a83146,5ac447e4f000+92d3000]
[ 8937.272400] Cypress: Cypress: potentially unexpected fatal signal 4.
[ 8937.272426] CPU: 2 UID: 0 PID: 21391 Comm: Cypress Not tainted 6.18.33.2-microsoft-standard-WSL2 #1 PREEMPT(none)
[ 8937.274907] WSL (21399 - CaptureCrash): Capturing crash for pid: 41251, executable: !root!.cache!Cypress!15.21.1!Cypress!Cypress, signal: 4, port: 50005

Side effect: because WSL collects crash dumps by default, each crash produced a core dump in %LOCALAPPDATA%\Temp\wsl-crashes on the Windows host — up to 194 GB per dump (577 GB total for 10 dumps, on a VM with only 7 GB RAM), which filled the host's system drive to 99 %. The dump size itself is WSL behavior (see microsoft/WSL#41314), but it makes this crash especially harmful for WSL users.

Setup details:

  • Cypress runs as root (binary cache in /root/.cache/Cypress)
  • WSLg is active: DISPLAY=:0, WAYLAND_DISPLAY=wayland-0
  • Testing type: e2e, started via cypress open --config-file cypress.config.ts

Desired behavior

Cypress should not crash. If Electron hits a fatal internal check (e.g. sandbox, GPU or Wayland/X11 display problems under WSLg), Cypress should print a readable error message explaining the cause instead of dying with SIGILL.

Test code to reproduce

Environment to reproduce:

  1. Windows 11 with WSL 2.7.14.0 and WSLg 1.0.73.2
  2. Ubuntu 24.04.3 LTS distro, logged in as root
  3. Install [email protected] in an e2e project and run npx cypress open (or npx cypress run)
  4. Cypress crashes with SIGILL after some time; check dmesg | grep Cypress

Cypress Version

15.21.1 (Electron 37.6.0, bundled Node 22.19.0)

Debug Logs

Other

Environment details

  • WSL version: 2.7.14.0
  • Kernel: 6.18.33.2-2
  • WSLg: 1.0.73.2
  • MSRDC: 1.2.7214
  • Direct3D: 1.611.1-81528511
  • CPU: 13th Gen Intel Core i7-1355U (12 threads, AVX2), 7 GB RAM assigned to WSL

Possibly related

  • #7045 – "The Test Runner unexpectedly exited via a exit event with signal SIGILL" (open, CI/Docker, often as root)
  • #28559 – "SIGILL (invalid opcode) crash after Network.loadingFailed loop of death" (closed as stale, same symptom on Cypress 13)
  • #23962 – SIGILL in Docker (closed as stale; maintainers asked to open a new issue for similar reports)
  • microsoft/WSL#41552 – WSLg Weston SIGSEGV crash loop with the same WSLg version (1.0.73.2); a crashing compositor could trigger a fatal check in Electron
  • microsoft/WSL#41314 – WSL crash collector writes huge Electron dumps to %TEMP%\wsl-crashes