aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/fuse.txt
blob: 24e705438dc7ecc580206c90d476c25cd1403fcd (plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# Copyright 2015 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <asm/ioctls.h>
include <linux/stat.h>
include <uapi/linux/fuse.h>

resource fd_fuse[fd]

syz_fuse_mount(target ptr[in, filename], mode flags[fuse_mode], uid uid, gid gid, maxread intptr, flags flags[mount_flags]) fd_fuse
syz_fuseblk_mount(target ptr[in, filename], blkdev ptr[in, filename], mode flags[fuse_mode], uid uid, gid gid, maxread intptr, blksize intptr, flags flags[mount_flags]) fd_fuse
ioctl$FUSE_DEV_IOC_CLONE(fd fd_fuse, cmd const[FUSE_DEV_IOC_CLONE], arg ptr[in, fd_fuse])
write$fuse_init(fd fd_fuse, arg ptr[in, fuse_init_out], len len[arg])
write$fuse_interrupt(fd fd_fuse, arg ptr[in, fuse_interrupt_out], len len[arg])
write$fuse_bmap(fd fd_fuse, arg ptr[in, fuse_bmap_out], len len[arg])
write$fuse_ioctl(fd fd_fuse, arg ptr[in, fuse_ioctl_out], len len[arg])
write$fuse_poll(fd fd_fuse, arg ptr[in, fuse_poll_out], len len[arg])
write$fuse_notify_poll_wakeup(fd fd_fuse, arg ptr[in, fuse_notify_poll_wakeup_out], len len[arg])
write$fuse_notify_inval_inode(fd fd_fuse, arg ptr[in, fuse_notify_inval_inode_out], len len[arg])
write$fuse_notify_inval_entry(fd fd_fuse, arg ptr[in, fuse_notify_inval_entry_out], len len[arg])
write$fuse_notify_delete(fd fd_fuse, arg ptr[in, fuse_notify_delete_out], len len[arg])
write$fuse_notify_store(fd fd_fuse, arg ptr[in, fuse_notify_store_out], len len[arg])
write$fuse_notify_retrieve(fd fd_fuse, arg ptr[in, fuse_notify_retrieve_out], len len[arg])

# 1 stands for default_permissions, 2 - allow_other
fuse_mode = 1, 2, S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO, S_IFSOCK, S_IFLNK, S_IFDIR

fuse_init_out {
	len	len[parent, int32]
	err	int32
	unique	int64

	maj	int32
	min	int32
	readah	int32
	flags	int32
	backg	int16
	congest	int16
	maxwr	int32
	timegr	int32
	unused0	const[0, int32]
	unused1	const[0, int32]
	unused2	const[0, int32]
	unused3	const[0, int32]
	unused4	const[0, int32]
	unused5	const[0, int32]
	unused6	const[0, int32]
	unused7	const[0, int32]
	unused8	const[0, int32]
}

fuse_interrupt_out {
	len	len[parent, int32]
	err	int32
	unique	int64
}

fuse_bmap_out {
	len	len[parent, int32]
	err	int32
	unique	int64

	block	int64
}

fuse_ioctl_out {
	len	len[parent, int32]
	err	int32
	unique	int64

	res	int32
	flags	int32
	iniovs	int32
	outiovs	int32
}

fuse_poll_out {
	len	len[parent, int32]
	err	int32
	unique	int64

	revents	int32
}

fuse_notify_poll_wakeup_out {
	len	len[parent, int32]
	err	int32
	unique	const[0, int64]

	kh	int16
}

fuse_notify_inval_inode_out {
	len1	len[parent, int32]
	err	int32
	unique	const[0, int64]

	ino	int64
	off	int64
	len2	int16
}

fuse_notify_inval_entry_out {
	len	len[parent, int32]
	err	int32
	unique	const[0, int64]

	par	int64
	namelen	int32
}

fuse_notify_delete_out {
	len	len[parent, int32]
	err	int32
	unique	const[0, int64]

	par	int64
	child	int64
	namelen	int32
}

fuse_notify_store_out {
	len	len[parent, int32]
	err	int32
	unique	const[0, int64]

	nodeid	int64
	off	int64
	size	int32
}

fuse_notify_retrieve_out {
	len	len[parent, int32]
	err	int32
	unique1	const[0, int64]

	unique2	int64
	nodeid	int64
	off	int64
	size	int32
}