Skip to content

Commit 47083ea

Browse files
author
Sablin Viacheslav
committed
sys/linux: updated fuse fs specifications
1 parent 6b85651 commit 47083ea

File tree

2 files changed

+106
-2
lines changed

2 files changed

+106
-2
lines changed

sys/linux/fs_fuse.txt

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ resource fd_fuse[fd]
1212
openat$fuse(fd const[AT_FDCWD], file ptr[in, string["/dev/fuse"]], flags const[O_RDWR], mode const[0]) fd_fuse
1313
openat$cuse(fd const[AT_FDCWD], file ptr[in, string["/dev/cuse"]], flags const[O_RDWR], mode const[0]) fd_fuse
1414
ioctl$FUSE_DEV_IOC_CLONE(fd fd_fuse, cmd const[FUSE_DEV_IOC_CLONE], arg ptr[in, fd_fuse])
15+
ioctl$FUSE_DEV_IOC_BACKING_OPEN(fd fd_fuse, cmd const[FUSE_DEV_IOC_BACKING_OPEN], arg ptr[in, fuse_backing_map])
16+
ioctl$FUSE_DEV_IOC_BACKING_CLOSE(fd fd_fuse, cmd const[FUSE_DEV_IOC_BACKING_CLOSE], arg ptr[in, int32])
1517

1618
type read_buffer array[int8, FUSE_MIN_READ_BUFFER]
1719
read$FUSE(fd fd_fuse, buf ptr[out, fuse_in[read_buffer]], len bytesize[buf])
@@ -34,12 +36,14 @@ write$FUSE_ENTRY(fd fd_fuse, arg ptr[in, fuse_out[fuse_entry_out]], len bytesize
3436
write$FUSE_CREATE_OPEN(fd fd_fuse, arg ptr[in, fuse_out[fuse_create_open_out]], len bytesize[arg])
3537
write$FUSE_DIRENT(fd fd_fuse, arg ptr[in, fuse_out[array[fuse_dirent]]], len bytesize[arg])
3638
write$FUSE_DIRENTPLUS(fd fd_fuse, arg ptr[in, fuse_out[array[fuse_direntplus]]], len bytesize[arg])
39+
write$FUSE_STATX(fd fd_fuse, arg ptr[in, fuse_out[fuse_statx_out]], len bytesize[arg])
3740
write$FUSE_NOTIFY_POLL(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_POLL, fuse_notify_poll_wakeup_out]], len bytesize[arg])
3841
write$FUSE_NOTIFY_INVAL_INODE(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_INVAL_INODE, fuse_notify_inval_inode_out]], len bytesize[arg])
3942
write$FUSE_NOTIFY_INVAL_ENTRY(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_INVAL_ENTRY, fuse_notify_inval_entry_out]], len bytesize[arg])
4043
write$FUSE_NOTIFY_STORE(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_STORE, fuse_notify_store_out]], len bytesize[arg])
4144
write$FUSE_NOTIFY_RETRIEVE(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_RETRIEVE, fuse_notify_retrieve_out]], len bytesize[arg])
4245
write$FUSE_NOTIFY_DELETE(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_DELETE, fuse_notify_delete_out]], len bytesize[arg])
46+
write$FUSE_NOTIFY_RESEND(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_RESEND, const[0, int32]]], len bytesize[arg])
4347

4448
syz_mount_image$fuse(fs ptr[in, string["fuse"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fuse_options], chdir bool8, size const[0], img ptr[in, array[int8]]) fd_dir
4549
syz_fuse_handle_req(fd fd_fuse, buf ptr[in, read_buffer], len bytesize[buf], res ptr[in, syz_fuse_req_out])
@@ -93,10 +97,24 @@ fuse_init_out {
9397
time_gran int32
9498
max_pages const[0, int16]
9599
map_alignment const[0, int16]
96-
unused array[const[0, int32], 8]
100+
flags2 flags[fuse_init_flags2, int32]
101+
max_stack_depth int32
102+
unused array[const[0, int32], 6]
97103
}
98104

99-
fuse_init_flags = FUSE_ASYNC_READ, FUSE_POSIX_LOCKS, FUSE_FILE_OPS, FUSE_ATOMIC_O_TRUNC, FUSE_EXPORT_SUPPORT, FUSE_BIG_WRITES, FUSE_DONT_MASK, FUSE_SPLICE_WRITE, FUSE_SPLICE_MOVE, FUSE_SPLICE_READ, FUSE_FLOCK_LOCKS, FUSE_HAS_IOCTL_DIR, FUSE_AUTO_INVAL_DATA, FUSE_DO_READDIRPLUS, FUSE_READDIRPLUS_AUTO, FUSE_ASYNC_DIO, FUSE_WRITEBACK_CACHE, FUSE_NO_OPEN_SUPPORT, FUSE_PARALLEL_DIROPS, FUSE_HANDLE_KILLPRIV, FUSE_POSIX_ACL, FUSE_ABORT_ERROR, FUSE_MAX_PAGES, FUSE_CACHE_SYMLINKS, FUSE_NO_OPENDIR_SUPPORT, FUSE_EXPLICIT_INVAL_DATA
105+
fuse_init_flags = FUSE_ASYNC_READ, FUSE_POSIX_LOCKS, FUSE_FILE_OPS, FUSE_ATOMIC_O_TRUNC, FUSE_EXPORT_SUPPORT, FUSE_BIG_WRITES, FUSE_DONT_MASK, FUSE_SPLICE_WRITE, FUSE_SPLICE_MOVE, FUSE_SPLICE_READ, FUSE_FLOCK_LOCKS, FUSE_HAS_IOCTL_DIR, FUSE_AUTO_INVAL_DATA, FUSE_DO_READDIRPLUS, FUSE_READDIRPLUS_AUTO, FUSE_ASYNC_DIO, FUSE_WRITEBACK_CACHE, FUSE_NO_OPEN_SUPPORT, FUSE_PARALLEL_DIROPS, FUSE_HANDLE_KILLPRIV, FUSE_POSIX_ACL, FUSE_ABORT_ERROR, FUSE_MAX_PAGES, FUSE_CACHE_SYMLINKS, FUSE_NO_OPENDIR_SUPPORT, FUSE_EXPLICIT_INVAL_DATA, FUSE_MAP_ALIGNMENT, FUSE_SUBMOUNTS, FUSE_HANDLE_KILLPRIV_V2, FUSE_SETXATTR_EXT, FUSE_INIT_EXT, FUSE_INIT_RESERVED
106+
fuse_init_flags2 = FUSE_SECURITY_CTX_FLAG2, FUSE_HAS_INODE_DAX_FLAG2, FUSE_CREATE_SUPP_GROUP_FLAG2, FUSE_HAS_EXPIRE_ONLY_FLAG2, FUSE_DIRECT_IO_ALLOW_MMAP_FLAG2, FUSE_PASSTHROUGH_FLAG2, FUSE_NO_EXPORT_SUPPORT_FLAG2, FUSE_HAS_RESEND_FLAG2, FUSE_DIRECT_IO_RELAX_FLAG2, FUSE_ALLOW_IDMAP_FLAG2
107+
108+
define FUSE_SECURITY_CTX_FLAG2 FUSE_SECURITY_CTX >> 32
109+
define FUSE_HAS_INODE_DAX_FLAG2 FUSE_HAS_INODE_DAX >> 32
110+
define FUSE_CREATE_SUPP_GROUP_FLAG2 FUSE_CREATE_SUPP_GROUP >> 32
111+
define FUSE_HAS_EXPIRE_ONLY_FLAG2 FUSE_HAS_EXPIRE_ONLY >> 32
112+
define FUSE_DIRECT_IO_ALLOW_MMAP_FLAG2 FUSE_DIRECT_IO_ALLOW_MMAP >> 32
113+
define FUSE_PASSTHROUGH_FLAG2 FUSE_PASSTHROUGH >> 32
114+
define FUSE_NO_EXPORT_SUPPORT_FLAG2 FUSE_NO_EXPORT_SUPPORT >> 32
115+
define FUSE_HAS_RESEND_FLAG2 FUSE_HAS_RESEND >> 32
116+
define FUSE_DIRECT_IO_RELAX_FLAG2 FUSE_DIRECT_IO_RELAX >> 32
117+
define FUSE_ALLOW_IDMAP_FLAG2 FUSE_ALLOW_IDMAP >> 32
100118

101119
fuse_lseek_out {
102120
offset int64
@@ -269,6 +287,48 @@ fuse_notify_retrieve_out {
269287
padding const[0, int32]
270288
} [packed]
271289

290+
fuse_statx_out {
291+
attr_valid int64
292+
attr_valid_nsec int32
293+
flags const[0, int32]
294+
spare array[const[0, int64], 2]
295+
stat fuse_statx
296+
}
297+
298+
fuse_statx {
299+
mask flags[fuse_statx_masx, int32]
300+
blksize int32
301+
attributes int64
302+
nlink int32
303+
uid uid
304+
gid gid
305+
mode flags[fuse_valid_type, int16]
306+
__spare0 array[const[0, int16], 1]
307+
ino int64
308+
size int64
309+
blocks int64
310+
attributes_mask int64
311+
atime fuse_sx_time
312+
btime fuse_sx_time
313+
ctime fuse_sx_time
314+
mtime fuse_sx_time
315+
rdev_major int32
316+
rdev_minor int32
317+
dev_major int32
318+
dev_minor int32
319+
__spare2 array[const[0, int64], 14]
320+
}
321+
322+
fuse_statx_masx = STATX_TYPE, STATX_MODE, STATX_NLINK, STATX_UID, STATX_GID, STATX_ATIME, STATX_MTIME, STATX_CTIME, STATX_INO, STATX_SIZE, STATX_BLOCKS, STATX_BASIC_STATS, STATX_BTIME, STATX_MNT_ID, STATX_DIOALIGN, STATX_MNT_ID_UNIQUE, STATX_SUBVOL, STATX_WRITE_ATOMIC
323+
324+
fuse_valid_type = S_IFLNK, S_IFREG, S_IFDIR, S_IFCHR, S_IFBLK, S_IFIFO, S_IFSOCK
325+
326+
fuse_sx_time {
327+
tv_sec int64
328+
tv_nsec int32
329+
__reserved const[0, int32]
330+
}
331+
272332
# Mount options.
273333

274334
fuse_options {
@@ -311,4 +371,11 @@ syz_fuse_req_out {
311371
direntplus ptr[in, syz_fuse_out[array[fuse_direntplus]]]
312372
create_open ptr[in, syz_fuse_out[fuse_create_open_out]]
313373
ioctl ptr[in, syz_fuse_out[fuse_ioctl_out]]
374+
statx ptr[in, syz_fuse_out[fuse_statx_out]]
375+
}
376+
377+
fuse_backing_map {
378+
fd fd_fuse
379+
flags const[0, int32]
380+
padding const[0, int64]
314381
}

sys/linux/fs_fuse.txt.const

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,46 +7,83 @@ FOPEN_KEEP_CACHE = 2
77
FOPEN_NONSEEKABLE = 4
88
FOPEN_STREAM = 16
99
FUSE_ABORT_ERROR = 2097152
10+
FUSE_ALLOW_IDMAP_FLAG2 = 256
1011
FUSE_ASYNC_DIO = 32768
1112
FUSE_ASYNC_READ = 1
1213
FUSE_ATOMIC_O_TRUNC = 8
1314
FUSE_AUTO_INVAL_DATA = 4096
1415
FUSE_BIG_WRITES = 32
1516
FUSE_CACHE_SYMLINKS = 8388608
17+
FUSE_CREATE_SUPP_GROUP_FLAG2 = 4
18+
FUSE_DEV_IOC_BACKING_CLOSE = 1074062594, mips64le:ppc64le:2147804418
19+
FUSE_DEV_IOC_BACKING_OPEN = 1074849025, mips64le:ppc64le:2148590849
1620
FUSE_DEV_IOC_CLONE = 2147804416, mips64le:ppc64le:1074062592
21+
FUSE_DIRECT_IO_ALLOW_MMAP_FLAG2 = 16
22+
FUSE_DIRECT_IO_RELAX_FLAG2 = 16
1723
FUSE_DONT_MASK = 64
1824
FUSE_DO_READDIRPLUS = 8192
1925
FUSE_EXPLICIT_INVAL_DATA = 33554432
2026
FUSE_EXPORT_SUPPORT = 16
2127
FUSE_FILE_OPS = 4
2228
FUSE_FLOCK_LOCKS = 1024
2329
FUSE_HANDLE_KILLPRIV = 524288
30+
FUSE_HANDLE_KILLPRIV_V2 = 268435456
31+
FUSE_HAS_EXPIRE_ONLY_FLAG2 = 8
32+
FUSE_HAS_INODE_DAX_FLAG2 = 2
2433
FUSE_HAS_IOCTL_DIR = 2048
34+
FUSE_HAS_RESEND_FLAG2 = 128
35+
FUSE_INIT_EXT = 1073741824
36+
FUSE_INIT_RESERVED = 18446744071562067968
2537
FUSE_IOCTL_RETRY = 4
2638
FUSE_KERNEL_MINOR_VERSION = 41
2739
FUSE_KERNEL_VERSION = 7
40+
FUSE_MAP_ALIGNMENT = 67108864
2841
FUSE_MAX_PAGES = 4194304
2942
FUSE_MIN_READ_BUFFER = 8192
3043
FUSE_NOTIFY_DELETE = 6
3144
FUSE_NOTIFY_INVAL_ENTRY = 3
3245
FUSE_NOTIFY_INVAL_INODE = 2
3346
FUSE_NOTIFY_POLL = 1
47+
FUSE_NOTIFY_RESEND = 7
3448
FUSE_NOTIFY_RETRIEVE = 5
3549
FUSE_NOTIFY_STORE = 4
50+
FUSE_NO_EXPORT_SUPPORT_FLAG2 = 64
3651
FUSE_NO_OPENDIR_SUPPORT = 16777216
3752
FUSE_NO_OPEN_SUPPORT = 131072
3853
FUSE_PARALLEL_DIROPS = 262144
54+
FUSE_PASSTHROUGH_FLAG2 = 32
3955
FUSE_POSIX_ACL = 1048576
4056
FUSE_POSIX_LOCKS = 2
4157
FUSE_READDIRPLUS_AUTO = 16384
58+
FUSE_SECURITY_CTX_FLAG2 = 1
59+
FUSE_SETXATTR_EXT = 536870912
4260
FUSE_SPLICE_MOVE = 256
4361
FUSE_SPLICE_READ = 512
4462
FUSE_SPLICE_WRITE = 128
63+
FUSE_SUBMOUNTS = 134217728
4564
FUSE_WRITEBACK_CACHE = 65536
4665
F_RDLCK = 0
4766
F_UNLCK = 2
4867
F_WRLCK = 1
4968
O_RDWR = 2
69+
STATX_ATIME = 32
70+
STATX_BASIC_STATS = 2047
71+
STATX_BLOCKS = 1024
72+
STATX_BTIME = 2048
73+
STATX_CTIME = 128
74+
STATX_DIOALIGN = 8192
75+
STATX_GID = 16
76+
STATX_INO = 256
77+
STATX_MNT_ID = 4096
78+
STATX_MNT_ID_UNIQUE = 16384
79+
STATX_MODE = 2
80+
STATX_MTIME = 64
81+
STATX_NLINK = 4
82+
STATX_SIZE = 512
83+
STATX_SUBVOL = 32768
84+
STATX_TYPE = 1
85+
STATX_UID = 8
86+
STATX_WRITE_ATOMIC = 65536
5087
S_IFBLK = 24576
5188
S_IFCHR = 8192
5289
S_IFDIR = 16384

0 commit comments

Comments
 (0)