Windows Version
10.0.26200.8037
WSL Version
2.7.12.0
Are you using WSL 1 or WSL 2?
Kernel Version
6.18.33.2-2 (uname -r: 6.18.33.2-microsoft-standard-WSL2)
Distro Version
Ubuntu 24.04.4 LTS
Other Software
- .wslconfig at time of incident: memory=2560MB, processors=4, swap=2GB,
autoMemoryReclaim=gradual (host has 8 GB RAM; limit since raised to 4096MB)
- Inside the VM: long-lived opencode CLI (Bun runtime) session ~735 MB RSS
plus several ~150 MB child processes — the source of memory pressure
Repro Steps
Cannot reproduce on demand — it requires kernel memory exhaustion inside a
small VM. Single occurrence on 2026-08-28 ~05:30 UTC with full capture below.
Trigger profile:
- Set .wslconfig memory cap well below steady-state process usage
(2560 MB cap vs ~1.3 GB of resident processes + page cache).
- Let memory pressure reach kernel OOM conditions (dmesg shows allocation
failure reports from vmbus channel-open work).
- From that moment, every process that calls getifaddrs() at startup
(Node/Bun runtimes, ip addr, ...) hangs forever in D state — each
retry adds another unkillable process, worsening the exhaustion.
Expected Behavior
A failed sub-channel open (ENOMEM) should unwind, release rtnl, and let the
interface keep working single-channel. Netlink queries must not be able to
wedge the whole control plane permanently, and the VM must remain
shut-downable (wsl --shutdown should not hang).
Actual Behavior
Under kernel memory pressure, the network stack wedged permanently:
- Every process calling getifaddrs() hung forever in D state,
wchan = rtnl_dumpit; SIGKILL undeliverable.
- One child became an unreapable zombie.
wsl --shutdown itself hung indefinitely (graceful shutdown waits for
processes to exit).
- Only recovery: elevated taskkill /F on vmmemWSL.exe and wslservice.exe
(service stuck in STOP_PENDING), then restart vmcompute + WSLService.
Notably, established connections / data-plane traffic kept working — only
netlink control/query paths hung, consistent with rtnl_mutex being held
forever while data paths use RCU.
Analysis: sub-channel open (netvsc_sc_open → vmbus_open) failed with -ENOMEM
while rtnl was held, and the error path appears to never release rtnl_mutex.
From that point every RTM_GETLINK netlink dump blocks forever — exactly where
the D-state processes were stuck (rtnl_dumpit).
Diagnostic Logs
Captured from dmesg while the wedge was live (the VM was later force-killed,
so this capture is the primary evidence):
hv_netvsc de1108d5-... eth0: sub channel open failed: -12
hv_netvsc de1108d5-... eth0: sub channel open failed: -12
with kernel stack trace:
__vmbus_open → vmbus_open → netvsc_sc_open → vmbus_add_channel_work
? rtnl_is_locked+0x19/0x30
followed by a full kernel allocation-failure report (Mem-Info dump) and:
WSL (107) ERROR: CheckConnection: getaddrinfo() failed: -5
warn_alloc: 1 callbacks suppressed
Related:
Windows Version
10.0.26200.8037
WSL Version
2.7.12.0
Are you using WSL 1 or WSL 2?
Kernel Version
6.18.33.2-2 (uname -r: 6.18.33.2-microsoft-standard-WSL2)
Distro Version
Ubuntu 24.04.4 LTS
Other Software
autoMemoryReclaim=gradual (host has 8 GB RAM; limit since raised to 4096MB)
plus several ~150 MB child processes — the source of memory pressure
Repro Steps
Cannot reproduce on demand — it requires kernel memory exhaustion inside a
small VM. Single occurrence on 2026-08-28 ~05:30 UTC with full capture below.
Trigger profile:
(2560 MB cap vs ~1.3 GB of resident processes + page cache).
failure reports from vmbus channel-open work).
(Node/Bun runtimes,
ip addr, ...) hangs forever in D state — eachretry adds another unkillable process, worsening the exhaustion.
Expected Behavior
A failed sub-channel open (ENOMEM) should unwind, release rtnl, and let the
interface keep working single-channel. Netlink queries must not be able to
wedge the whole control plane permanently, and the VM must remain
shut-downable (wsl --shutdown should not hang).
Actual Behavior
Under kernel memory pressure, the network stack wedged permanently:
wchan = rtnl_dumpit; SIGKILL undeliverable.
wsl --shutdownitself hung indefinitely (graceful shutdown waits forprocesses to exit).
(service stuck in STOP_PENDING), then restart vmcompute + WSLService.
Notably, established connections / data-plane traffic kept working — only
netlink control/query paths hung, consistent with rtnl_mutex being held
forever while data paths use RCU.
Analysis: sub-channel open (netvsc_sc_open → vmbus_open) failed with -ENOMEM
while rtnl was held, and the error path appears to never release rtnl_mutex.
From that point every RTM_GETLINK netlink dump blocks forever — exactly where
the D-state processes were stuck (rtnl_dumpit).
Diagnostic Logs
Captured from dmesg while the wedge was live (the VM was later force-killed,
so this capture is the primary evidence):
with kernel stack trace:
followed by a full kernel allocation-failure report (Mem-Info dump) and:
Related:
wsl -twedges all BPF trampoline attach/detach untilwsl --shutdown#41136 (RCU-tasks stall wedges all BPF ops untilwsl --shutdown) — same"irrecoverable kernel wait wedges a whole subsystem" shape, different
subsystem; possibly a class of WSL2 kernel liveness bugs
CheckConnection: getaddrinfo() failed: -5line ina different context (mirrored networking + VPN) — unrelated root cause