Repository navigation
WSLg: shared-memory virtiofs share returns EIO after host hibernate/resume; all GUI windows become transparent until wsl --shutdown #41903
Description
Windows Version
Microsoft Windows [Version 10.0.26200.9457]
WSL Version
WSL version: 2.7.0.0 Kernel version: 6.6.114.1-1 WSLg version: 1.0.71 MSRDC version: 1.2.6676 Direct3D version: 1.611.1-81528511 DXCore version: 10.0.26100.1-240331-1435.ge-release Windows version: 10.0.26200.9457
Are you using WSL 1, WSL 2, or WSLC?
- WSL 2
- WSL 1
- WSLC
Kernel Version
6.6.114.1-1
Distro Version
Ubuntu 22.04
Other Software
Android Studio (Linux), xeyes for a minimal repro. .wslconfig: networkingMode=mirrored, dnsTunneling=true, autoProxy=true, memory=10GB, swap=8GB, [experimental] autoMemoryReclaim=gradual, sparseVhd=true.
Repro Steps
- Start WSL 2 with WSLg; run any GUI app once (works, shared-memory path active,
use_gfxredir = 1). - Leave the VM running; hibernate (or long-suspend) the Windows host overnight. In this case: suspend requested via the power API at 22:10, resume ~12 h later at 10:28 (Kernel-Power 42/107).
- After resume, launch any Linux GUI app (
xeyes, Android Studio).
Expected Behavior
GUI windows render normally after resume, or WSLg recovers the shared-memory path on its own.
Actual Behavior
Every GUI app gets a taskbar entry and a RAIL window in msrdc.exe (title prefixed [WARN:COPY MODE]), but the window is a layered window that never paints, i.e. fully transparent.
In the system distro, /mnt/shared_memory (virtiofs tag wslg, dax=always) returns EIO on every operation, including stat of the mount root:
# wsl --system -u root -- ls -la /mnt/shared_memory
ls: cannot access '/mnt/shared_memory': Input/output error
/mnt/wslg/weston.log logs, for every surface:
[18:34:55.745] rdp_allocate_shared_memory: Failed to open "/mnt/shared_memory/{68f9bcca-57f7-4ea0-abe9-342e6d03bcdb}" with error: Input/output error
Timeline detail: the resume was at 10:28, but the first EIO is at 18:34:55, which was the first window created after the resume (no window surface was allocated in between). So the breakage happens at resume and stays latent until WSLg first touches the share.
The VM itself is fine (vmwp.exe / vmmemWSL running continuously since 4 days earlier; distro shells, VS Code server, 9p drvfs, networking all work). Only the shared-memory device is dead.
Diagnostic Logs
What was checked (host side, Windows)
\Sessions\<id>\BaseNamedObjects\WSL\<vm-guid>\wslgobject directory exists, is owned by the user, DACL intact, and a test process can successfully create a section in it.wslservice.exeholds open handles to the directory. So the host-side object namespace is healthy.vmwp.exefor the VM is alive, responsive, idle, no WER crash/hang entries forvmwp.exe,wslservice.exe, ormsrdc.exe. Hyper-V Worker/Compute/VMMS channels show nothing but the normal NIC reconnect at resume.- Hyper-V-Compute-Operational shows the share wired as
VirtualMachine/Devices/FlexibleIov/<guid>with"HostingModel":"ExternalRestricted". - In the guest: PCI device
1af4:105a(virtio1) is bound tovirtiofs, device status0x0f(DRIVER_OK), mount still present, yet every FUSE op returns EIO. - Guest kernel log at the same minute shows repeated
misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -22from the GPU-PV path, and the host logged WERLiveKernelEventtelemetry buckets (no dump saved, no bugcheck).
Attempted recoveries (none help)
umount -l+ remount of/mnt/shared_memoryin the system distro: mount succeeds, every open/create still EIO.- Killing the WSLg
msrdc.exe: WSLGd respawns it, reconnects, still transparent. - Killing
weston: WSLGd respawns it withuse_gfxredir = 0(fallback), but windows still do not paint. - Only
wsl --shutdownfixes it, which kills every session in the distro.
Ask
- Is there any way to re-initialise the WSLg shared-memory (virtiofs/DAX) device in a running VM, short of recreating the VM?
- Could WSLg detect EIO on the shared-memory share and re-arm it, or at least make the copy-mode fallback actually paint after a resume?
Happy to collect wsl --debug-shell/debug console kernel logs or a WSL log bundle on the next occurrence if that helps.
Activity
github-actions commentedon Oct 13, 2026
Logs are required for review from WSL team
If this a feature request, please reply with '/feature'. If this is a question, reply with '/question'.
Otherwise, please attach logs by following the instructions below, your issue will not be reviewed unless they are added. These logs will help us understand what is going on in your machine.
How to collect WSL logs
Download and execute collect-wsl-logs.ps1 in an administrative powershell prompt:
The script will output the path of the log file once done.
If this is a networking issue, please use
.\collect-wsl-logs.ps1 -LogProfile networkinginstead, following the instructions in Collect WSL logs for networking issuesOnce completed please upload the output files to this GitHub issue.
See Collect WSL logs (recommended method).
If you choose to email these logs instead of attaching them to the bug, please send them to wsl-gh-logs@microsoft.com with the GitHub issue number in the subject, and include a link to your GitHub issue comment in the message body, and reply with '/emailed-logs'.
jozenstar commentedon Oct 13, 2026
Logs collected with the unmodified
collect-wsl-logs.ps1(default profile) from an elevated PowerShell, while the issue was live (VM still the same instance that went through the hibernate/resume; not restarted). ArchiveWslLogs-2026-10-13_20-14-54.tar.gzis attached in the next comment.What was reproduced while the trace was recording (local time 20:15:08–20:15:21):
followed by
timeout 10 xeyesin the Ubuntu-22.04 distro (DISPLAY=:0,WAYLAND_DISPLAY=wayland-0): the window appears in the taskbar but is fully transparent.Notes that may help triage:
wslg/weston.login the archive contains the originalrdp_allocate_shared_memory: Failed to open "/mnt/shared_memory/{guid}" ... Input/output errorentries (first at 18:34:55, the first window created after the 10:28 resume). weston was restarted once since then and now runs withuse_gfxredir = 0, so new windows no longer log the EIO but still do not paint.Microsoft.Windows.Lxss.Manager/Microsoft.Windows.Subsystem.Lxss) record no event for the failing virtiofs requests; only Plan9Tgetattr/Rgetattrtraffic for drvfs and HNS/VfpExt networking events appear. Guest side:virtio1(PCI1af4:105a) is bound tovirtiofs, device status0x0f, mountwslg /mnt/shared_memory virtiofs rw,dax=alwaysstill present.WSL (<pid> - Relay) ERROR: UtilAcceptVsock:244: Waiting for abnormally long accept(10)for ~10 relay processes, repeating every 60 s since ~14:43 the same day (visible asGuestLogevents in the trace). Possibly the same post-resume damage.\Sessions\<n>\BaseNamedObjects\WSL\<vm-guid>\wslgexists, is owned by the user, and a test process can create sections in it;wslservice.exeholds handles to it;vmwp.exeis healthy. The share is wired asVirtualMachine/Devices/FlexibleIov/<guid>with"HostingModel":"ExternalRestricted".Happy to run
collect-wsl-logs.ps1 -LogProfile hvsocketor a custom.wprpif a different provider set is needed.OneBlue commentedon Oct 13, 2026
Arthur Yazhevich (@jozenstar): You're using an old version of WSL. Can you see if running wsl --update solves the issue ?