1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
id = 1010
title = "Errors on 9p mounts"
state = "closed"
created_at = "2022-04-30T14:10:34.834Z"
closed_at = "2022-09-07T14:46:55.112Z"
labels = ["block:9p"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/1010"
host-os = "macOS (Monterey 12.3.1 (21E258))"
host-arch = "M1"
qemu-version = "7.0.0"
guest-os = "Ubuntu 22.04"
guest-arch = "aarch64"
description = """I'm trying to run Docker VMs with [Lima](https://github.com/lima-vm/lima), which uses QEMU. I'm trying to expose my home directory on macOS to the Ubuntu VM using `9p`. This is how the mount point looks like inside the Ubuntu VM:
```
root@lima-docker:~# mount | grep Users
mount0 on /Users/carlos type 9p (rw,relatime,dirsync,fscache,cachetag=4294894070,access=user,trans=virtio,version=9p2000.u)
root@lima-docker:~#
```
The problem I'm seeing is that doing an `ls -l /Users/carlos` gives a "Timer expired" error, and no output:
```
root@lima-docker:~# ls -l /Users/carlos
ls: reading directory '/Users/carlos': Timer expired
total 0
```
Under `strace`, it seems that the timer error is raised by the `getdents64` system call:
```
root@lima-docker:~# strace -f ls -l /Users/carlos
[..]
openat(AT_FDCWD, "/Users/carlos", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=1984, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xffffa16bf000
getdents64(3, 0xffffa16bf040, 131072) = -1 ETIME (Timer expired)
[..]
```
I've also tried the `9p2000.L` protocol instead, and the results are a bit better. I do get a directory listing, but I see "xxx" errors:
```
root@lima-docker:~# ls -l /Users/carlos
ls: /Users/carlos: Network dropped connection on reset
ls: /Users/carlos/Music: Network dropped connection on reset
ls: /Users/carlos/Pictures: Network dropped connection on reset
ls: /Users/carlos/Desktop: Network dropped connection on reset
ls: /Users/carlos/Library: Network dropped connection on reset
ls: /Users/carlos/Public: Network dropped connection on reset
ls: /Users/carlos/Movies: Network dropped connection on reset
ls: /Users/carlos/Applications: Network dropped connection on reset
ls: /Users/carlos/Dropbox: Network dropped connection on reset
ls: /Users/carlos/Maildir: Network dropped connection on reset
ls: /Users/carlos/Documents: Network dropped connection on reset
ls: /Users/carlos/Downloads: Network dropped connection on reset
total 0
drwx------ 5 carlos dialout 160 Dec 6 10:31 Applications
drwx------ 4 carlos dialout 128 Apr 28 14:40 Desktop
drwx------ 12 carlos dialout 384 Apr 30 08:44 Documents
drwx------ 164 carlos dialout 5248 Apr 29 13:50 Downloads
drwx------ 8 carlos dialout 256 Sep 4 2021 Dropbox
drwx------ 82 carlos dialout 2624 Apr 8 14:05 Library
drwxr-xr-x 3 carlos dialout 96 Nov 12 12:28 Maildir
drwx------ 4 carlos dialout 128 Jul 19 2021 Movies
drwx------ 4 carlos dialout 128 Aug 19 2021 Music
drwx------ 4 carlos dialout 128 Jul 19 2021 Pictures
drwxr-xr-x 4 carlos dialout 128 Jul 19 2021 Public
```
The errors in this case seem to come from the `lgetxattr`system call:
```
root@lima-docker:~# strace -f ls -l /Users/carlos
[..]
statx(AT_FDCWD, "/Users/carlos/Downloads", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW, STATX_MODE|STATX_NLINK|STATX_UID|STATX_GID|STATX_MTIME|STATX_SIZE, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFDIR|0700, stx_size=5248, ...}) = 0
lgetxattr("/Users/carlos/Downloads", "security.selinux", 0xaaaaec72da70, 255) = -1 ENETRESET (Network dropped connection on reset)
write(2, "ls: ", 4ls: ) = 4
write(2, "/Users/carlos/Downloads", 23/Users/carlos/Downloads) = 23
write(2, ": Network dropped connection on "..., 37: Network dropped connection on reset) = 37
[..]
```
I've reported this to the Lima folks at https://github.com/lima-vm/lima/issues/831, and they suggested opening an issue here. Any ideas?"""
reproduce = """1. If you have Lima installed (I'm using version 0.10.0): `limactl start --name=docker ./lima-templates/docker.yaml`"""
additional = """"""
|