diff options
| author | Andrey Konovalov <andreyknvl@google.com> | 2020-06-11 00:15:08 +0200 |
|---|---|---|
| committer | Andrey Konovalov <andreyknvl@gmail.com> | 2020-06-12 18:42:12 +0200 |
| commit | 562406d573506d52b320edcb55599caf2e4e1cab (patch) | |
| tree | 069db0ac7c5060eaf1182a3afa481efffc628c5d /sys/linux/fs_fuse.txt | |
| parent | 9a5c7758645d534a95ec944f2efb6d4e9b7aafbe (diff) | |
sys/linux: rename fuse.txt to fs_fuse.txt
Diffstat (limited to 'sys/linux/fs_fuse.txt')
| -rw-r--r-- | sys/linux/fs_fuse.txt | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/sys/linux/fs_fuse.txt b/sys/linux/fs_fuse.txt new file mode 100644 index 000000000..c2bccccdd --- /dev/null +++ b/sys/linux/fs_fuse.txt @@ -0,0 +1,268 @@ +# 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 { + major const[FUSE_KERNEL_VERSION, int32] + minor 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 + max_pages const[0, int16] + map_alignment const[0, int16] + unused array[const[0, int32], 8] +} + +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 const[0, int32] + spare array[const[0, int32], 6] +} + +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 |
