mirror of
https://github.com/reactos/syzkaller.git
synced 2025-02-19 11:00:37 +00:00
266 lines
7.3 KiB
Plaintext
266 lines
7.3 KiB
Plaintext
# 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>
|
|
include <uapi/linux/fcntl.h>
|
|
|
|
resource fd_fuse[fd]
|
|
|
|
openat$fuse(fd const[AT_FDCWD], file ptr[in, string["/dev/fuse"]], flags const[O_RDWR], mode const[0]) fd_fuse
|
|
openat$cuse(fd const[AT_FDCWD], file ptr[in, string["/dev/cuse"]], flags const[O_RDWR], mode const[0]) fd_fuse
|
|
ioctl$FUSE_DEV_IOC_CLONE(fd fd_fuse, cmd const[FUSE_DEV_IOC_CLONE], arg ptr[in, fd_fuse])
|
|
read$FUSE(fd fd_fuse, buf ptr[out, array[int8, 4096]], len len[buf])
|
|
|
|
mount$fuse(src const[0], dst ptr[in, filename], type ptr[in, string["fuse"]], flags flags[mount_flags], opts ptr[in, fuse_options])
|
|
mount$fuseblk(src ptr[in, string["/dev/loop0"]], dst ptr[in, filename], type ptr[in, string["fuseblk"]], flags flags[mount_flags], opts ptr[in, fuse_options])
|
|
|
|
write$FUSE_INTERRUPT(fd fd_fuse, arg ptr[in, fuse_out[void]], len bytesize[arg])
|
|
write$FUSE_INIT(fd fd_fuse, arg ptr[in, fuse_out[fuse_init_out]], len bytesize[arg])
|
|
write$FUSE_BMAP(fd fd_fuse, arg ptr[in, fuse_out[fuse_bmap_out]], len bytesize[arg])
|
|
write$FUSE_IOCTL(fd fd_fuse, arg ptr[in, fuse_out[fuse_ioctl_out]], len bytesize[arg])
|
|
write$FUSE_POLL(fd fd_fuse, arg ptr[in, fuse_out[fuse_poll_out]], len bytesize[arg])
|
|
write$FUSE_LSEEK(fd fd_fuse, arg ptr[in, fuse_out[fuse_lseek_out]], len bytesize[arg])
|
|
write$FUSE_LK(fd fd_fuse, arg ptr[in, fuse_out[fuse_lk_out]], len bytesize[arg])
|
|
write$FUSE_GETXATTR(fd fd_fuse, arg ptr[in, fuse_out[fuse_getxattr_out]], len bytesize[arg])
|
|
write$FUSE_STATFS(fd fd_fuse, arg ptr[in, fuse_out[fuse_statfs_out]], len bytesize[arg])
|
|
write$FUSE_WRITE(fd fd_fuse, arg ptr[in, fuse_out[fuse_write_out]], len bytesize[arg])
|
|
write$FUSE_OPEN(fd fd_fuse, arg ptr[in, fuse_out[fuse_open_out]], len bytesize[arg])
|
|
write$FUSE_ATTR(fd fd_fuse, arg ptr[in, fuse_out[fuse_attr_out]], len bytesize[arg])
|
|
write$FUSE_ENTRY(fd fd_fuse, arg ptr[in, fuse_out[fuse_entry_out]], len bytesize[arg])
|
|
write$FUSE_CREATE_OPEN(fd fd_fuse, arg ptr[in, fuse_out[fuse_create_open_out]], len bytesize[arg])
|
|
write$FUSE_DIRENT(fd fd_fuse, arg ptr[in, fuse_out[array[fuse_dirent]]], len bytesize[arg])
|
|
write$FUSE_DIRENTPLUS(fd fd_fuse, arg ptr[in, fuse_out[array[fuse_direntplus]]], len bytesize[arg])
|
|
write$FUSE_NOTIFY_POLL(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_POLL, fuse_notify_poll_wakeup_out]], len bytesize[arg])
|
|
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])
|
|
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])
|
|
write$FUSE_NOTIFY_STORE(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_STORE, fuse_notify_store_out]], len bytesize[arg])
|
|
write$FUSE_NOTIFY_RETRIEVE(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_RETRIEVE, fuse_notify_retrieve_out]], len bytesize[arg])
|
|
write$FUSE_NOTIFY_DELETE(fd fd_fuse, arg ptr[in, fuse_notify[FUSE_NOTIFY_DELETE, fuse_notify_delete_out]], len bytesize[arg])
|
|
|
|
type fuse_ino int64[0:6]
|
|
type fuse_gen int64[0:3]
|
|
type fuse_unique int64[1:8]
|
|
|
|
type fuse_notify[MSG, PAYLOAD] {
|
|
len len[parent, int32]
|
|
err const[MSG, int32]
|
|
unique const[0, int64]
|
|
payload PAYLOAD
|
|
} [packed]
|
|
|
|
type fuse_out[PAYLOAD] {
|
|
len len[parent, int32]
|
|
err flags[fuse_errors, int32]
|
|
unique fuse_unique
|
|
payload PAYLOAD
|
|
} [packed]
|
|
|
|
# -ENOENT, -EAGAIN, -ENOSYS
|
|
fuse_errors = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -11, -38
|
|
|
|
fuse_init_out {
|
|
maj const[FUSE_KERNEL_VERSION, int32]
|
|
min const[FUSE_KERNEL_MINOR_VERSION, int32]
|
|
max_readahead int32
|
|
flags flags[fuse_init_flags, int32]
|
|
max_background int16
|
|
congestion_threshold int16
|
|
max_write int32
|
|
time_gran int32
|
|
unused array[const[0, int32], 9]
|
|
}
|
|
|
|
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_lseek_out {
|
|
offset int64
|
|
}
|
|
|
|
fuse_bmap_out {
|
|
block int64
|
|
}
|
|
|
|
fuse_ioctl_out {
|
|
res int32
|
|
flags flags[fuse_ioctl_flags, int32]
|
|
in_iovs int32
|
|
out_iovs int32
|
|
}
|
|
|
|
fuse_ioctl_flags = 0, FUSE_IOCTL_RETRY
|
|
|
|
fuse_poll_out {
|
|
revents int32
|
|
padding const[0, int32]
|
|
}
|
|
|
|
fuse_notify_poll_wakeup_out {
|
|
kh int64
|
|
}
|
|
|
|
fuse_getxattr_out {
|
|
size int32
|
|
padding const[0, int32]
|
|
}
|
|
|
|
fuse_lk_out {
|
|
lk fuse_file_lock
|
|
}
|
|
|
|
fuse_file_lock {
|
|
start int64
|
|
end int64
|
|
type flags[fuse_lock_type, int32]
|
|
pid pid
|
|
}
|
|
|
|
fuse_lock_type = F_UNLCK, F_RDLCK, F_WRLCK
|
|
|
|
fuse_statfs_out {
|
|
st fuse_kstatfs
|
|
}
|
|
|
|
fuse_kstatfs {
|
|
blocks int64
|
|
bfree int64
|
|
bavail int64
|
|
files int64
|
|
ffree int64
|
|
bsize int32
|
|
namelen int32
|
|
frsize int32
|
|
padding_spare array[const[0, int32], 7]
|
|
}
|
|
|
|
fuse_write_out {
|
|
size int32
|
|
padding const[0, int32]
|
|
}
|
|
|
|
fuse_open_out {
|
|
fh const[0, int64]
|
|
open_flags flags[fuse_open_flags, int32]
|
|
padding const[0, int32]
|
|
}
|
|
|
|
fuse_open_flags = FOPEN_DIRECT_IO, FOPEN_KEEP_CACHE, FOPEN_NONSEEKABLE, FOPEN_CACHE_DIR, FOPEN_STREAM
|
|
|
|
fuse_attr_out {
|
|
attr_valid int64
|
|
attr_valid_nsec int32
|
|
dummy const[0, int32]
|
|
attr fuse_attr
|
|
}
|
|
|
|
fuse_entry_out {
|
|
nodeid fuse_ino
|
|
generation fuse_gen
|
|
entry_valid int64
|
|
attr_valid int64
|
|
entry_valid_nsec int32
|
|
attr_valid_nsec int32
|
|
attr fuse_attr
|
|
}
|
|
|
|
fuse_create_open_out {
|
|
entry fuse_entry_out
|
|
open fuse_open_out
|
|
}
|
|
|
|
fuse_attr {
|
|
ino fuse_ino
|
|
size int64
|
|
blocks int64
|
|
atime int64
|
|
mtime int64
|
|
ctime int64
|
|
atimensec int32
|
|
mtimensec int32
|
|
ctimensec int32
|
|
mode int32
|
|
nlink int32
|
|
uid uid
|
|
gid gid
|
|
rdev int32
|
|
blksize int32
|
|
padding const[0, int32]
|
|
}
|
|
|
|
fuse_dirent {
|
|
ino fuse_ino
|
|
off int64
|
|
namelen len[name, int32]
|
|
type int32
|
|
name stringnoz
|
|
} [align_8]
|
|
|
|
fuse_direntplus {
|
|
entry fuse_entry_out
|
|
dirent fuse_dirent
|
|
}
|
|
|
|
fuse_notify_inval_inode_out {
|
|
ino fuse_ino
|
|
off int64
|
|
len int64
|
|
}
|
|
|
|
fuse_notify_inval_entry_out {
|
|
parent1 fuse_ino
|
|
namelen len[name, int32]
|
|
padding const[0, int32]
|
|
name stringnoz
|
|
zero const[0, int8]
|
|
} [packed]
|
|
|
|
fuse_notify_delete_out {
|
|
parent1 fuse_ino
|
|
child fuse_ino
|
|
namelen len[name, int32]
|
|
padding const[0, int32]
|
|
name stringnoz
|
|
zero const[0, int8]
|
|
} [packed]
|
|
|
|
fuse_notify_store_out {
|
|
nodeid fuse_ino
|
|
off int64
|
|
size len[data, int32]
|
|
padding const[0, int32]
|
|
data array[const[0, int8]]
|
|
} [packed]
|
|
|
|
fuse_notify_retrieve_out {
|
|
notify_unique const[0, int64]
|
|
nodeid fuse_ino
|
|
offset int64
|
|
size int32
|
|
padding const[0, int32]
|
|
} [packed]
|
|
|
|
# Mount options.
|
|
|
|
fuse_options {
|
|
fd fs_opt_hex["fd", fd_fuse]
|
|
comma0 const[',', int8]
|
|
rootmode fs_opt_oct["rootmode", flags[fuse_mode]]
|
|
comma1 const[',', int8]
|
|
user_id fs_opt_dec["user_id", uid]
|
|
comma2 const[',', int8]
|
|
group_id fs_opt_dec["group_id", gid]
|
|
comma3 const[',', int8]
|
|
opts fs_options[fuse_opts]
|
|
} [packed]
|
|
|
|
fuse_opts [
|
|
max_read fs_opt_hex["max_read", int32]
|
|
allow_other stringnoz["allow_other"]
|
|
default_permissions stringnoz["default_permissions"]
|
|
blksize fs_opt_hex["blksize", flags[fuse_block_sizes]]
|
|
] [varlen]
|
|
|
|
fuse_mode = S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO, S_IFSOCK, S_IFLNK, S_IFDIR
|
|
fuse_block_sizes = 512, 1024, 2048, 4096
|