Skip to content

WSL 2 can't mount NFS share #8640

@kaysond

Description

@kaysond

Version

Microsoft Windows [Version 10.0.19044.1826]

WSL Version

  • WSL 2
  • WSL 1

Kernel Version

5.10.102.1-microsoft-standard-WSL2+ (slightly customized)

Distro Version

Debian 11 and Ubuntu 22.04

Other Software

No response

Repro Steps

  1. Set up an NFS server
  2. Add an export like /srv/nfs4 10.0.0.10(rw,sync,no_subtree_check,insecure) (Windows host IP; insecure is necessary because of WSL 2's NAT)
  3. Server: sudo exportfs -ra
  4. Mount it in your WSL distro using something like sudo mount -v -t nfs nfserverhost:/srv/nfs4 /media -o nfsvers=4.2,clientaddr=10.0.0.10 (I set up a custom kernel with nfs 4.2 support and some debugging print statements; same thing happens with nfs 4.1 on the vanilla kernel)

Expected Behavior

Share should mount.

Actual Behavior

Mount fails with:

mount.nfs: timeout set for Thu Jul 21 11:01:26 2022
mount.nfs: trying text-based options 'nfsvers=4.2,clientaddr=10.0.0.10,addr=10.0.0.4'
mount.nfs: mount(2): Operation not permitted
mount.nfs: Operation not permitted

Diagnostic Logs

WslLogs-2022-07-21_11-28-53.zip

strace

execve("/bin/mount", ["mount", "-v", "-t", "nfs", "nfshost.domain.tld:/path/to/home/"..., "/home", "-o", "nfsvers=4.2,clientaddr=10.7.7.10"], 0x7ffc526ec5f8 /* 12 vars */) = 0
brk(NULL)                               = 0x555e3002c000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=13374, ...}) = 0
mmap(NULL, 13374, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0ccb08d000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libmount.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\312\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=375424, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0ccb08b000
mmap(NULL, 378312, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0ccb02e000
mprotect(0x7f0ccb039000, 323584, PROT_NONE) = 0
mmap(0x7f0ccb039000, 245760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb000) = 0x7f0ccb039000
mmap(0x7f0ccb075000, 73728, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x47000) = 0x7f0ccb075000
mmap(0x7f0ccb088000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x59000) = 0x7f0ccb088000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@n\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1839792, ...}) = 0
mmap(NULL, 1852680, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0ccae69000
mprotect(0x7f0ccae8e000, 1662976, PROT_NONE) = 0
mmap(0x7f0ccae8e000, 1355776, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7f0ccae8e000
mmap(0x7f0ccafd9000, 303104, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x170000) = 0x7f0ccafd9000
mmap(0x7f0ccb024000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1ba000) = 0x7f0ccb024000
mmap(0x7f0ccb02a000, 13576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f0ccb02a000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libblkid.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\236\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=326624, ...}) = 0
mmap(NULL, 329512, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0ccae18000
mprotect(0x7f0ccae21000, 274432, PROT_NONE) = 0
mmap(0x7f0ccae21000, 204800, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x9000) = 0x7f0ccae21000
mmap(0x7f0ccae53000, 65536, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3b000) = 0x7f0ccae53000
mmap(0x7f0ccae64000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4b000) = 0x7f0ccae64000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220}\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=166120, ...}) = 0
mmap(NULL, 177672, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0ccadec000
mmap(0x7f0ccadf3000, 102400, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7f0ccadf3000
mmap(0x7f0ccae0c000, 32768, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x20000) = 0x7f0ccae0c000
mmap(0x7f0ccae14000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x27000) = 0x7f0ccae14000
mmap(0x7f0ccae16000, 5640, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f0ccae16000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libpcre2-8.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\"\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=617128, ...}) = 0
mmap(NULL, 619432, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0ccad54000
mmap(0x7f0ccad56000, 438272, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7f0ccad56000
mmap(0x7f0ccadc1000, 167936, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6d000) = 0x7f0ccadc1000
mmap(0x7f0ccadea000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x95000) = 0x7f0ccadea000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\21\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=18688, ...}) = 0
mmap(NULL, 20752, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0ccad4e000
mmap(0x7f0ccad4f000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7f0ccad4f000
mmap(0x7f0ccad51000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f0ccad51000
mmap(0x7f0ccad52000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f0ccad52000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 |\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=149520, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0ccad4c000
mmap(NULL, 136304, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0ccad2a000
mmap(0x7f0ccad31000, 65536, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7f0ccad31000
mmap(0x7f0ccad41000, 20480, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7f0ccad41000
mmap(0x7f0ccad46000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b000) = 0x7f0ccad46000
mmap(0x7f0ccad48000, 13424, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f0ccad48000
close(3)                                = 0
mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0ccad27000
arch_prctl(ARCH_SET_FS, 0x7f0ccad27840) = 0
mprotect(0x7f0ccb024000, 12288, PROT_READ) = 0
mprotect(0x7f0ccad46000, 4096, PROT_READ) = 0
mprotect(0x7f0ccad52000, 4096, PROT_READ) = 0
mprotect(0x7f0ccadea000, 4096, PROT_READ) = 0
mprotect(0x7f0ccae14000, 4096, PROT_READ) = 0
mprotect(0x7f0ccae64000, 16384, PROT_READ) = 0
mprotect(0x7f0ccb088000, 8192, PROT_READ) = 0
mprotect(0x555e2ff34000, 4096, PROT_READ) = 0
mprotect(0x7f0ccb0bb000, 4096, PROT_READ) = 0
munmap(0x7f0ccb08d000, 13374)           = 0
set_tid_address(0x7f0ccad27b10)         = 320
set_robust_list(0x7f0ccad27b20, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7f0ccad31690, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7f0ccad3e140}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7f0ccad31730, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7f0ccad3e140}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", 0x7ffcc42f8410) = -1 ENOENT (No such file or directory)
statfs("/selinux", 0x7ffcc42f8410)      = -1 ENOENT (No such file or directory)
brk(NULL)                               = 0x555e3002c000
brk(0x555e3004d000)                     = 0x555e3004d000
openat(AT_FDCWD, "/proc/filesystems", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, "nodev\tsysfs\nnodev\ttmpfs\nnodev\tbd"..., 1024) = 471
read(3, "", 1024)                       = 0
close(3)                                = 0
access("/etc/selinux/config", F_OK)     = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3041456, ...}) = 0
mmap(NULL, 3041456, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f0ccaa40000
close(3)                                = 0
getuid()                                = 0
geteuid()                               = 0
access("/sys/fs/smackfs", F_OK)         = -1 ENOENT (No such file or directory)
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/sbin/mount.nfs", {st_mode=S_IFREG|S_ISUID|0755, st_size=114784, ...}) = 0
getuid()                                = 0
geteuid()                               = 0
getgid()                                = 0
getegid()                               = 0
prctl(PR_GET_DUMPABLE)                  = 1 (SUID_DUMP_USER)
stat("/run", {st_mode=S_IFDIR|0755, st_size=180, ...}) = 0
lstat("/run/mount/utab", 0x7ffcc42f7270) = -1 ENOENT (No such file or directory)
mkdir("/run/mount", 0755)               = -1 EEXIST (File exists)
stat("/run/mount/utab", 0x7ffcc42f7160) = -1 ENOENT (No such file or directory)
stat("/run/mount", {st_mode=S_IFDIR|0755, st_size=40, ...}) = 0
geteuid()                               = 0
getegid()                               = 0
getuid()                                = 0
getgid()                                = 0
access("/run/mount", R_OK|W_OK)         = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f0ccad27b10) = 321
wait4(321, mount.nfs: timeout set for Thu Jul 21 11:34:31 2022
mount.nfs: trying text-based options 'nfsvers=4.2,clientaddr=10.7.7.10,addr=10.7.7.4'
mount.nfs: mount(2): Operation not permitted
mount.nfs: Operation not permitted
[{WIFEXITED(s) && WEXITSTATUS(s) == 32}], 0, NULL) = 321
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=321, si_uid=0, si_status=32, si_utime=0, si_stime=0} ---
dup(1)                                  = 3
close(3)                                = 0
dup(2)                                  = 3
close(3)                                = 0
exit_group(32)                          = ?
+++ exited with 32 +++

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions