[BUG] Cowork Windows: virtiofs cant resolve NTFS junctions inside shared folder (readlink EIO)

Resolved 💬 3 comments Opened Feb 11, 2026 by vmfunc Closed Mar 11, 2026

virtiofs cant handle NTFS junctions inside a shared folder. i created a directory with junctions to my drive roots so i could give cowork access to all my drives at once, selected it in the folder picker, and the junctions show up as symlinks in the VM but cant actually be followed. readlink() returns EIO on all of them.

they work fine on windows (dir traverses them no problem), its purely a virtiofs thing.

this is related to #24964 / #24927 but different. those are about the folder picker rejecting stuff outside home. my junction folder IS inside home and the picker accepts it fine. the issue is that once virtiofs mounts it, junction targets cant be resolved in the guest. different layer (FUSE translation vs picker validation), and its the next bug you hit even if those get fixed.

setup

C:\Users\vmfun\AllDrives\
├── C  <JUNCTION>  [\??\C:\]
├── F  <JUNCTION>  [\??\F:\]
├── I  <JUNCTION>  [\??\I:\]
└── J  <JUNCTION>  [\??\J:\]

just mklink /J for each drive. selected the folder in cowork, picker takes it.

on windows

C:\Users\vmfun> dir AllDrives\C\ /w
 Directory of C:\Users\vmfun\AllDrives\C
[Program Files]  [Users]  [Windows]  ...

in the VM

$ ls -la /sessions/*/mnt/AllDrives/
lrwxrwxrwx  C
lrwxrwxrwx  F
lrwxrwxrwx  I
lrwxrwxrwx  J

$ ls /sessions/*/mnt/AllDrives/C/
ls cannot access Input/output error

virtiofs mounts the folder and sees the junctions as symlinks (st_mode=0o120777), which is technically correct. but readlink() fails because the target is a windows device path (\??\C:\) that doesnt exist in the guest VFS.

readlink("/sessions/.../mnt/AllDrives/C", 0x7ffcae4c25d0, 128) = -1 EIO

the inode metadata is all there and looks fine, its just the target resolution thats broken

  File  /sessions/.../mnt/AllDrives/C
  Size  0         Blocks  0          IO Block  4096   symbolic link
Device  2fh/47d   Inode  5348024558864485  Links  1
Access  (0777/lrwxrwxrwx)
os.lstat(path)      # works, st_mode=0o120777
os.listdir(path)    # [Errno 5] Input/output error
os.readlink(path)   # [Errno 5] Input/output error

theres no way to give cowork access to multiple drives. picker only lets you pick one folder. junctions inside your home dir are the obvious workaround and they silently break with no error from cowork. between this and #24964/#24927 windows users with multi-drive setups are kinda stuck.

fix ideas

  • resolve junctions host-side before passing to guest so it sees a real directory
  • mount each junction target as a virtiofs sub-mount
  • or just let us select multiple folders/drives in the picker

repro

mkdir C:\Users\%USERNAME%\AllDrives
mklink /J C:\Users\%USERNAME%\AllDrives\C C:\

select the folder in cowork. in the VM

ls /sessions/*/mnt/AllDrives/C/    # EIO

env

  • windows 11, cowork as of 2026-02-11
  • all junctions affected (C, F, I, J)
  • tested with and without admin, same result

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗