[BUG] Cowork Windows: virtiofs cant resolve NTFS junctions inside shared folder (readlink EIO)
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
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗