github.com/google/syzkaller@v0.0.0-20240517125934-c0f1611a36d6/sys/linux/filesystem.txt (about)

     1  # Copyright 2018 syzkaller project authors. All rights reserved.
     2  # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  include <uapi/linux/mount.h>
     5  include <linux/fs.h>
     6  include <linux/fcntl.h>
     7  
     8  mount(src ptr[in, blockdev_filename], dst ptr[in, filename], type ptr[in, string[filesystem]], flags flags[mount_flags], data ptr[in, string, opt])
     9  umount2(path ptr[in, filename], flags flags[umount_flags])
    10  
    11  mount$bpf(src const[0], dst ptr[in, filename], type ptr[in, string["bpf"]], flags flags[mount_flags], opts ptr[in, fs_options[bpf_options]])
    12  mount$overlay(src const[0], dst ptr[in, filename], type ptr[in, string["overlay"]], flags flags[mount_flags], opts ptr[in, fs_options[overlay_options]])
    13  mount$binder(src const[0], dst ptr[in, filename], type ptr[in, string["binder"]], flags flags[mount_flags], opts ptr[in, fs_options[binder_options]])
    14  mount$tmpfs(src const[0], dst ptr[in, filename], type ptr[in, string["tmpfs"]], flags flags[mount_flags], opts ptr[in, fs_options[tmpfs_options]])
    15  mount$cgroup(src const[0], dst ptr[in, filename], type ptr[in, string["cgroup"]], flags flags[mount_flags], opts ptr[in, fs_options[cgroup_options]])
    16  mount$cgroup2(src const[0], dst ptr[in, filename], type ptr[in, string["cgroup2"]], flags flags[mount_flags], opts ptr[in, fs_options[cgroup2_options]])
    17  mount$afs(src ptr[in, afs_source], dst ptr[in, filename], type ptr[in, string["afs"]], flags flags[mount_flags], opts ptr[in, fs_options[afs_options]])
    18  
    19  # A bind mount ignores the filesystem type argument, but
    20  # pkg/host/syscalls_linux.go:isSupportedFilesystem() requires one in
    21  # /proc/filesystems.  Use a common and valid filesystem string ("pipefs") to
    22  # pass the check.
    23  mount$bind(src ptr[in, filename], dst ptr[in, filename], type ptr[in, string["pipefs"]], flags flags[mount_flags], data const[0])
    24  
    25  # esdfs is ChromeOS-specific:
    26  # https://chromium.googlesource.com/chromiumos/third_party/kernel/+/d2c1fb9fcdb53%5E%21/
    27  mount$esdfs(src ptr[in, filename], dst ptr[in, filename], type ptr[in, string["esdfs"]], flags flags[mount_flags], opts ptr[in, fs_options[esdfs_options]])
    28  
    29  # TODO: pvfs2 requires some device/source, but it looks unused:
    30  # https://elixir.bootlin.com/linux/v6.1-rc6/source/fs/orangefs/super.c#L488
    31  # Instead it sends requests to some pvfs2-req character device,
    32  # and somebody is supposed to answer these requests with ioctls.
    33  # But the deivce is not even created in /dev, somebody is supposed to mknod it.
    34  # And it's major number is unknown (printed to console in debug mode only):
    35  # https://elixir.bootlin.com/linux/v6.1-rc6/source/fs/orangefs/devorangefs-req.c#L803
    36  # It does not look usable.
    37  mount$pvfs2(src ptr[in, string["unused"]], dst ptr[in, filename], type ptr[in, string["pvfs2"]], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]])
    38  
    39  # TODO: nfs source is "hostname:export_path", but we also needs to setup port,
    40  # protocol and other options, and most importantly we need the server to reply to RPCs.
    41  # There is something called nfsd (fs/nfsd) which may help and which we need to test as well.
    42  mount$nfs(src ptr[in, string], dst ptr[in, filename], type ptr[in, string["nfs"]], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]])
    43  mount$nfs4(src ptr[in, string], dst ptr[in, filename], type ptr[in, string["nfs4"]], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]])
    44  
    45  resource fd_fscontext[fd]
    46  
    47  fsopen(type ptr[in, string[filesystem]], flags flags[fsopen_flags]) fd_fscontext
    48  fspick(dfd fd_dir[opt], path ptr[in, filename], flags flags[fspick_flags]) fd_fscontext
    49  fsconfig$FSCONFIG_SET_FLAG(fd fd_fscontext, cmd const[FSCONFIG_SET_FLAG], key ptr[in, string[fsconfig_flag_params]], value const[0], aux const[0])
    50  fsconfig$FSCONFIG_SET_STRING(fd fd_fscontext, cmd const[FSCONFIG_SET_STRING], key ptr[in, string], value ptr[in, string], aux const[0])
    51  fsconfig$FSCONFIG_SET_BINARY(fd fd_fscontext, cmd const[FSCONFIG_SET_BINARY], key ptr[in, string], value ptr[in, array[int8]], aux bytesize[value])
    52  fsconfig$FSCONFIG_SET_PATH(fd fd_fscontext, cmd const[FSCONFIG_SET_PATH], key ptr[in, string], value ptr[in, filename], aux fd_dir[opt])
    53  fsconfig$FSCONFIG_SET_PATH_EMPTY(fd fd_fscontext, cmd const[FSCONFIG_SET_PATH_EMPTY], key ptr[in, string], value ptr[in, filename], aux fd_dir[opt])
    54  fsconfig$FSCONFIG_SET_FD(fd fd_fscontext, cmd const[FSCONFIG_SET_FD], key ptr[in, string], value const[0], aux fd)
    55  fsconfig$FSCONFIG_CMD_CREATE(fd fd_fscontext, cmd const[FSCONFIG_CMD_CREATE], key const[0], value const[0], aux const[0])
    56  fsconfig$FSCONFIG_CMD_RECONFIGURE(fd fd_fscontext, cmd const[FSCONFIG_CMD_RECONFIGURE], key const[0], value const[0], aux const[0])
    57  fsmount(fs_fd fd_fscontext, flags flags[fsmount_flags], attr_flags flags[fsmount_attr_flags]) fd
    58  move_mount(from_dfd fd_dir[opt], from_pathname ptr[in, filename], to_dfd fd_dir[opt], to_pathname ptr[in, filename], flags flags[move_mount_flags])
    59  open_tree(dfd fd_dir[opt], filename ptr[in, filename], flags flags[open_tree_flags]) fd
    60  mount_setattr(dfd fd_dir[opt], filename ptr[in, filename], flags flags[mount_setattr_flags], args ptr[in, mount_attr], size bytesize[args])
    61  
    62  open_tree_flags = AT_EMPTY_PATH, AT_NO_AUTOMOUNT, AT_RECURSIVE, AT_SYMLINK_NOFOLLOW, OPEN_TREE_CLONE, OPEN_TREE_CLOEXEC
    63  
    64  mount_setattr_flags = AT_EMPTY_PATH, AT_NO_AUTOMOUNT, AT_RECURSIVE, AT_SYMLINK_NOFOLLOW
    65  
    66  mount_attr {
    67  	attr_set	flags[mount_attr_flags, int64]
    68  	attr_clr	flags[mount_attr_flags, int64]
    69  	propagation	flags[mount_attr_propagation_flags, int64]
    70  	userns_fd	align64[fd_userns]
    71  }
    72  
    73  mount_attr_flags = MOUNT_ATTR_IDMAP, fsmount_attr_flags
    74  mount_attr_propagation_flags = MS_UNBINDABLE, MS_PRIVATE, MS_SLAVE, MS_SHARED
    75  fsmount_flags = FSMOUNT_CLOEXEC
    76  fsopen_flags = FSOPEN_CLOEXEC
    77  fspick_flags = FSPICK_CLOEXEC
    78  fsmount_attr_flags = MOUNT_ATTR_RDONLY, MOUNT_ATTR_NOSUID, MOUNT_ATTR_NODEV, MOUNT_ATTR_NOEXEC, MOUNT_ATTR__ATIME, MOUNT_ATTR_NODIRATIME
    79  move_mount_flags = MOVE_MOUNT_F_SYMLINKS, MOVE_MOUNT_F_AUTOMOUNTS, MOVE_MOUNT_F_EMPTY_PATH, MOVE_MOUNT_T_SYMLINKS, MOVE_MOUNT_T_AUTOMOUNTS, MOVE_MOUNT_T_EMPTY_PATH, MOVE_MOUNT_SET_GROUP, MOVE_MOUNT_BENEATH
    80  fsconfig_flag_params = "dirsync", "lazytime", "mand", "posixacl", "ro", "sync", "async", "nolazytime", "nomand", "rw", "silent"
    81  
    82  filesystem = "sysfs", "rootfs", "ramfs", "tmpfs", "devtmpfs", "debugfs", "securityfs", "sockfs", "pipefs", "anon_inodefs", "devpts", "hugetlbfs", "vfat", "ecryptfs", "fuseblk", "fuse", "rpc_pipefs", "nfs", "nfs4", "nfsd", "binfmt_misc", "autofs", "xfs", "jfs", "msdos", "ntfs", "ntfs3", "minix", "hfs", "hfsplus", "qnx4", "ufs", "btrfs", "configfs", "ncpfs", "qnx6", "exofs", "befs", "vxfs", "gfs2", "gfs2meta", "fusectl", "bfs", "nsfs", "efs", "cifs", "efivarfs", "affs", "tracefs", "bdev", "ocfs2", "ocfs2_dlmfs", "hpfs", "proc", "afs", "reiserfs", "jffs2", "romfs", "aio", "sysv", "v7", "udf", "ceph", "pstore", "adfs", "9p", "hostfs", "squashfs", "cramfs", "iso9660", "coda", "nilfs2", "logfs", "overlay", "f2fs", "omfs", "ubifs", "openpromfs", "bpf", "cgroup", "cgroup2", "cpuset", "mqueue", "aufs", "selinuxfs", "dax", "erofs", "virtiofs", "exfat", "binder", "zonefs", "pvfs2", "incremental-fs", "esdfs", "smb3", "gadgetfs", ext4_types
    83  
    84  blockdev_filename [
    85  	filename	filename
    86  	nbd		nbd_filename
    87  	loop		loop_filename
    88  	nullb		string["/dev/nullb0"]
    89  	md0		string["/dev/md0"]
    90  	sg0		string["/dev/sg0"]
    91  	sr0		string["/dev/sr0"]
    92  ] [varlen]
    93  
    94  nbd_filename {
    95  	prefix	stringnoz["/dev/nbd"]
    96  	id	proc['0', 1, int8]
    97  	z	const[0, int8]
    98  } [packed]
    99  
   100  loop_filename {
   101  	prefix	stringnoz["/dev/loop"]
   102  	id	proc['0', 1, int8]
   103  	z	const[0, int8]
   104  } [packed]
   105  
   106  syz_read_part_table(size len[img], img ptr[in, compressed_image]) (timeout[200], no_generate, no_minimize)
   107  
   108  define SYZ_MOUNT_IMAGE_TIMEOUT	4000
   109  
   110  syz_mount_image$vfat(fs ptr[in, string["vfat"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[vfat_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   111  syz_mount_image$msdos(fs ptr[in, string["msdos"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[msdos_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   112  syz_mount_image$bfs(fs ptr[in, string["bfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   113  syz_mount_image$xfs(fs ptr[in, string["xfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[xfs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   114  syz_mount_image$minix(fs ptr[in, string["minix"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   115  syz_mount_image$reiserfs(fs ptr[in, string["reiserfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[reiserfs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   116  syz_mount_image$hfs(fs ptr[in, string["hfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[hfs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   117  syz_mount_image$hfsplus(fs ptr[in, string["hfsplus"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[hfsplus_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   118  syz_mount_image$iso9660(fs ptr[in, string["iso9660"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[iso9660_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   119  syz_mount_image$gfs2(fs ptr[in, string["gfs2"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[gfs2_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   120  syz_mount_image$jfs(fs ptr[in, string["jfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[jfs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   121  syz_mount_image$btrfs(fs ptr[in, string["btrfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[btrfs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   122  syz_mount_image$ntfs(fs ptr[in, string["ntfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[ntfs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   123  syz_mount_image$ntfs3(fs ptr[in, string["ntfs3"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[ntfs3_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   124  syz_mount_image$ext4(fs ptr[in, string[ext4_types]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[ext4_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   125  syz_mount_image$f2fs(fs ptr[in, string["f2fs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[f2fs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   126  syz_mount_image$ocfs2(fs ptr[in, string["ocfs2"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   127  syz_mount_image$erofs(fs ptr[in, string["erofs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[erofs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   128  syz_mount_image$exfat(fs ptr[in, string["exfat"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[exfat_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   129  syz_mount_image$cramfs(fs ptr[in, string["cramfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   130  syz_mount_image$romfs(fs ptr[in, string["romfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   131  syz_mount_image$efs(fs ptr[in, string["efs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   132  syz_mount_image$jffs2(fs ptr[in, string["jffs2"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[jffs2_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   133  syz_mount_image$nilfs2(fs ptr[in, string["nilfs2"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[nilfs2_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   134  syz_mount_image$squashfs(fs ptr[in, string["squashfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   135  syz_mount_image$udf(fs ptr[in, string["udf"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[udf_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   136  syz_mount_image$bcachefs(fs ptr[in, string["bcachefs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[bcachefs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   137  
   138  # TODO: zonefs needs a zoned block device:
   139  # https://elixir.bootlin.com/linux/v6.1-rc6/source/fs/zonefs/super.c#L1768
   140  # So currnetly the mount always fails.
   141  # These docs say such devices can be emulated with nullb, but need special setup:
   142  # https://zonedstorage.io/docs/getting-started/zbd-emulation
   143  # https://btrfs.wiki.kernel.org/index.php/Zoned
   144  syz_mount_image$zonefs(fs ptr[in, string["zonefs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[zonefs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   145  
   146  # TODO: ubifs needs a special ubi device:
   147  # https://elixir.bootlin.com/linux/v6.1-rc6/source/fs/ubifs/super.c#L2063
   148  # So currnetly the mount always fails.
   149  syz_mount_image$ubifs(fs ptr[in, string["ubifs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[ubifs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   150  
   151  # TODO: add mount options for the following file systems.
   152  syz_mount_image$adfs(fs ptr[in, string["adfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   153  syz_mount_image$affs(fs ptr[in, string["affs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   154  syz_mount_image$befs(fs ptr[in, string["befs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   155  syz_mount_image$vxfs(fs ptr[in, string["vxfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   156  syz_mount_image$omfs(fs ptr[in, string["omfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   157  syz_mount_image$hpfs(fs ptr[in, string["hpfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   158  syz_mount_image$qnx4(fs ptr[in, string["qnx4"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   159  syz_mount_image$qnx6(fs ptr[in, string["qnx6"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   160  syz_mount_image$sysv(fs ptr[in, string["sysv"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   161  syz_mount_image$ufs(fs ptr[in, string["ufs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   162  syz_mount_image$gfs2meta(fs ptr[in, string["gfs2meta"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   163  syz_mount_image$v7(fs ptr[in, string["v7"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[stringnoz]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   164  
   165  # Note: tmpfs does not need an image, but we use this in tests.
   166  syz_mount_image$tmpfs(fs ptr[in, string["tmpfs"]], dir ptr[in, filename], flags flags[mount_flags], opts ptr[in, fs_options[tmpfs_options]], chdir bool8, size len[img], img ptr[in, compressed_image]) fd_dir (timeout[SYZ_MOUNT_IMAGE_TIMEOUT], no_generate, no_minimize)
   167  
   168  type fs_options[ELEMS] {
   169  	elems	array[fs_opt_elem[ELEMS]]
   170  	common	array[fs_opt_elem[fs_options_common]]
   171  	null	const[0, int8]
   172  } [packed]
   173  
   174  type fs_opt_elem[ELEMS] {
   175  	elem	ELEMS
   176  	comma	const[',', int8]
   177  } [packed]
   178  
   179  type fs_opt[NAME, TYPE] {
   180  	name	stringnoz[NAME]
   181  	eq	const['=', int8]
   182  	val	TYPE
   183  } [packed]
   184  
   185  type fs_opt_nodelim[NAME, TYPE] {
   186  	name	stringnoz[NAME]
   187  	val	TYPE
   188  } [packed]
   189  
   190  type fs_opt_str[NAME] fs_opt[NAME, stringnoz]
   191  type fs_opt_dec[NAME, VAL] fs_opt[NAME, fmt[dec, VAL]]
   192  type fs_opt_hex[NAME, VAL] fs_opt[NAME, fmt[hex, VAL]]
   193  type fs_opt_oct[NAME, VAL] fs_opt[NAME, fmt[oct, VAL]]
   194  type fs_opt_dec_suffix[NAME] fs_opt[NAME, array[flags[fs_opt_digits_suffix, int8]]]
   195  type fs_opt_filename[NAME] fs_opt[NAME, stringnoz[filename]]
   196  type fs_opt_codepage[NAME] fs_opt[NAME, stringnoz[codepages_names]]
   197  type fs_opt_cp_num[NAME] fs_opt[NAME, stringnoz[codepage_nums]]
   198  
   199  fs_opt_digits_suffix = '-', 'x', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'k', 'm', 'g', 't', 'p', 'e', '%'
   200  
   201  fs_options_common [
   202  	flag			stringnoz[fsconfig_flag_params]
   203  
   204  # SELinux options:
   205  	context			fs_opt["context", stringnoz[selinux_user_context]]
   206  	fscontext		fs_opt["fscontext", stringnoz[selinux_user_context]]
   207  	rootcontext		fs_opt["rootcontext", stringnoz[selinux_user_context]]
   208  	defcontext		fs_opt["defcontext", stringnoz[selinux_user_context]]
   209  	seclabel		stringnoz["seclabel"]
   210  
   211  # Smack options:
   212  	smackfsdef		fs_opt_str["smackfsdef"]
   213  	smackfsfloor		fs_opt_str["smackfsfloor"]
   214  	smackfshat		fs_opt_str["smackfshat"]
   215  	smackfsroot		fs_opt_str["smackfsroot"]
   216  	smackfstransmute	fs_opt_str["smackfstransmute"]
   217  
   218  # IMA options:
   219  	measure			stringnoz["measure"]
   220  	dont_measure		stringnoz["dont_measure"]
   221  	appraise		stringnoz["appraise"]
   222  	dont_appraise		stringnoz["dont_appraise"]
   223  	audit			stringnoz["audit"]
   224  	hash			stringnoz["hash"]
   225  	dont_hash		stringnoz["dont_hash"]
   226  	permit_directio		stringnoz["permit_directio"]
   227  	obj_user		fs_opt_str["obj_user"]
   228  	obj_role		fs_opt_str["obj_role"]
   229  	obj_type		fs_opt_str["obj_type"]
   230  	subj_user		fs_opt_str["subj_user"]
   231  	subj_role		fs_opt_str["subj_role"]
   232  	subj_type		fs_opt_str["subj_type"]
   233  	func			fs_opt["func", stringnoz[ima_funcs]]
   234  	mask			fs_opt["mask", stringnoz[ima_masks]]
   235  	fsmagic			fs_opt_hex["fsmagic", intptr]
   236  	fsname			fs_opt_str["fsname"]
   237  	fsuuid			fs_opt["fsuuid", uuid_str]
   238  	uid_eq			fs_opt_dec["uid", uid]
   239  	euid_eq			fs_opt_dec["euid", uid]
   240  	fowner_eq		fs_opt_dec["fowner", uid]
   241  	uid_gt			fs_opt_nodelim["uid>", fmt[dec, uid]]
   242  	euid_gt			fs_opt_nodelim["euid>", fmt[dec, uid]]
   243  	fowner_gt		fs_opt_nodelim["fowner>", fmt[dec, uid]]
   244  	uid_lt			fs_opt_nodelim["uid<", fmt[dec, uid]]
   245  	euid_lt			fs_opt_nodelim["euid<", fmt[dec, uid]]
   246  	fowner_lt		fs_opt_nodelim["fowner<", fmt[dec, uid]]
   247  	appraise_type		stringnoz["appraise_type=imasig"]
   248  	pcr			fs_opt_dec["pcr", int64[0:64]]
   249  ] [varlen]
   250  
   251  uuid_str {
   252  	p0	array[flags[hex_chars, int8], 8]
   253  	d0	const['-', int8]
   254  	p1	array[flags[hex_chars, int8], 4]
   255  	d1	const['-', int8]
   256  	p2	array[flags[hex_chars, int8], 4]
   257  	d2	const['-', int8]
   258  	p3	array[flags[hex_chars, int8], 4]
   259  	d3	const['-', int8]
   260  	p4	array[flags[hex_chars, int8], 8]
   261  }
   262  
   263  hex_chars = '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
   264  
   265  ima_funcs = "FILE_CHECK", "PATH_CHECK", "MODULE_CHECK", "FIRMWARE_CHECK", "FILE_MMAP", "MMAP_CHECK", "BPRM_CHECK", "CREDS_CHECK", "KEXEC_KERNEL_CHECK", "KEXEC_INITRAMFS_CHECK", "POLICY_CHECK"
   266  ima_masks = "MAY_EXEC", "MAY_WRITE", "MAY_READ", "MAY_APPEND", "^MAY_EXEC", "^MAY_WRITE", "^MAY_READ", "^MAY_APPEND"
   267  
   268  msdos_options [
   269  	fat	fat_options
   270  	nodots	stringnoz["nodots"]
   271  	dots	stringnoz["dots"]
   272  ] [varlen]
   273  
   274  vfat_options [
   275  	fat		fat_options
   276  	iocharset	fs_opt_codepage["iocharset"]
   277  	rodir		stringnoz["rodir"]
   278  	utf8no		stringnoz["utf8=0"]
   279  	utf8		stringnoz["utf8=1"]
   280  	uni_xlateno	stringnoz["uni_xlate=0"]
   281  	uni_xlate	stringnoz["uni_xlate=1"]
   282  	numtail		stringnoz["nonumtail=0"]
   283  	nonumtail	stringnoz["nnonumtail=1"]
   284  	shortname_lower	stringnoz["shortname=lower"]
   285  	shortname_win95	stringnoz["shortname=win95"]
   286  	shortname_winnt	stringnoz["shortname=winnt"]
   287  	shortname_mixed	stringnoz["shortname=mixed"]
   288  ] [varlen]
   289  
   290  fat_options [
   291  	check_relaxed	stringnoz["check=relaxed"]
   292  	check_strict	stringnoz["check=strict"]
   293  	check_normal	stringnoz["check=normal"]
   294  	usefree		stringnoz["usefree"]
   295  	nocase		stringnoz["nocase"]
   296  	quiet		stringnoz["quiet"]
   297  	showexec	stringnoz["showexec"]
   298  	debug		stringnoz["debug"]
   299  	sys_immutable	stringnoz["sys_immutable"]
   300  	flush		stringnoz["flush"]
   301  	tz_utc		stringnoz["tz=UTC"]
   302  	errors_continue	stringnoz["errors=continue"]
   303  	errors_remount	stringnoz["errors=remount-ro"]
   304  	discard		stringnoz["discard"]
   305  	nfs		stringnoz["nfs"]
   306  	nfs_nostale_ro	stringnoz["nfs=nostale_ro"]
   307  	dos1xfloppy	stringnoz["dos1xfloppy"]
   308  	uid		fs_opt_hex["uid", uid]
   309  	gid		fs_opt_hex["gid", gid]
   310  	umask		fs_opt_oct["umask", int32]
   311  	dmask		fs_opt_oct["dmask", int32]
   312  	fmask		fs_opt_oct["fmask", int32]
   313  	allow_utime	fs_opt_oct["allow_utime", int32]
   314  	time_offset	fs_opt_hex["time_offset", int32[-1440:1440]]
   315  	codepage	fs_opt_cp_num["codepage"]
   316  ] [varlen]
   317  
   318  xfs_options [
   319  	wsync		stringnoz["wsync"]
   320  	noalign		stringnoz["noalign"]
   321  	swalloc		stringnoz["swalloc"]
   322  	nouuid		stringnoz["nouuid"]
   323  	mtpt		stringnoz["mtpt"]
   324  	grpid		stringnoz["grpid"]
   325  	nogrpid		stringnoz["nogrpid"]
   326  	bsdgroups	stringnoz["bsdgroups"]
   327  	sysvgroups	stringnoz["sysvgroups"]
   328  	norecovery	stringnoz["norecovery"]
   329  	inode64		stringnoz["inode64"]
   330  	inode32		stringnoz["inode32"]
   331  	ikeep		stringnoz["ikeep"]
   332  	noikeep		stringnoz["noikeep"]
   333  	largeio		stringnoz["largeio"]
   334  	nolargeio	stringnoz["nolargeio"]
   335  	attr2		stringnoz["attr2"]
   336  	noattr2		stringnoz["noattr2"]
   337  	filestreams	stringnoz["filestreams"]
   338  	quota		stringnoz["quota"]
   339  	noquota		stringnoz["noquota"]
   340  	lazytime	stringnoz["lazytime"]
   341  	nolazytime	stringnoz["nolazytime"]
   342  	usrquota	stringnoz["usrquota"]
   343  	grpquota	stringnoz["grpquota"]
   344  	prjquota	stringnoz["prjquota"]
   345  	uquota		stringnoz["uquota"]
   346  	gquota		stringnoz["gquota"]
   347  	pquota		stringnoz["pquota"]
   348  	uqnoenforce	stringnoz["uqnoenforce"]
   349  	gqnoenforce	stringnoz["gqnoenforce"]
   350  	pqnoenforce	stringnoz["pqnoenforce"]
   351  	qnoenforce	stringnoz["qnoenforce"]
   352  	discard		stringnoz["discard"]
   353  	nodiscard	stringnoz["nodiscard"]
   354  	dax		stringnoz["dax"]
   355  	barrier		stringnoz["barrier"]
   356  	nobarrier	stringnoz["nobarrier"]
   357  	logbufs		fs_opt_dec["logbufs", int32[-1:8]]
   358  	biosize		fs_opt_dec["biosize", int32]
   359  	sunit		fs_opt_hex["sunit", int32]
   360  	swidth		fs_opt_hex["swidth", int32]
   361  	logbsize	fs_opt_dec_suffix["logbsize"]
   362  	allocsize	fs_opt_dec_suffix["allocsize"]
   363  	logdev		fs_opt_filename["logdev"]
   364  	rtdev		fs_opt_filename["rtdev"]
   365  ] [varlen]
   366  
   367  reiserfs_options [
   368  	tails_on		stringnoz["tails=on"]
   369  	tails_off		stringnoz["tails=off"]
   370  	tails_small		stringnoz["tails=small"]
   371  	notail			stringnoz["notail"]
   372  	conv			stringnoz["conv"]
   373  	noattrs			stringnoz["noattrs"]
   374  	expose_privroot		stringnoz["expose_privroot"]
   375  	user_xattr		stringnoz["user_xattr"]
   376  	nouser_xattr		stringnoz["nouser_xattr"]
   377  	acl			stringnoz["acl"]
   378  	noacl			stringnoz["noacl"]
   379  	replayonly		stringnoz["replayonly"]
   380  	nolargeio		stringnoz["nolargeio"]
   381  	usrquota		stringnoz["usrquota"]
   382  	grpquota		stringnoz["grpquota"]
   383  	noquota			stringnoz["noquota"]
   384  	usrjquota		stringnoz["usrjquota"]
   385  	usrjquota_file		stringnoz["usrjquota=syz"]
   386  	grpjquota		stringnoz["grpjquota"]
   387  	commit			fs_opt_hex["commit", int32]
   388  	resize			fs_opt_hex["resize", int32]
   389  	resize_auto		stringnoz["resize=auto"]
   390  	jdev			fs_opt_filename["jdev"]
   391  	jqfmt_vfsold		stringnoz["jqfmt=vfsold"]
   392  	jqfmt_vfsv0		stringnoz["jqfmt=vfsv0"]
   393  	hash_tea		stringnoz["hash=tea"]
   394  	hash_rupasov		stringnoz["hash=rupasov"]
   395  	hash_r5			stringnoz["hash=r5"]
   396  	balloc_noborder		stringnoz["block-allocator=noborder"]
   397  	balloc_border		stringnoz["block-allocator=border"]
   398  	balloc_no_unhash_reloc	stringnoz["block-allocator=no_unhashed_relocation"]
   399  	balloc_hashed_reloc	stringnoz["block-allocator=hashed_relocation"]
   400  	balloc_test4		stringnoz["block-allocator=test4"]
   401  	balloc_notest4		stringnoz["block-allocator=notest4"]
   402  	barrier_none		stringnoz["barrier=none"]
   403  	barrier_flush		stringnoz["barrier=flush"]
   404  	data_ordered		stringnoz["data=ordered"]
   405  	data_journal		stringnoz["data=journal"]
   406  	data_writeback		stringnoz["data=writeback"]
   407  	errors_continue		stringnoz["errors=continue"]
   408  	errors_ro_remount	stringnoz["errors=ro-remount"]
   409  ] [varlen]
   410  
   411  hfs_options [
   412  	quiet		stringnoz["quiet"]
   413  	umask		fs_opt_oct["umask", int32]
   414  	file_umask	fs_opt_oct["file_umask", int32]
   415  	dir_umask	fs_opt_oct["dir_umask", int32]
   416  	uid		fs_opt_hex["uid", uid]
   417  	gid		fs_opt_hex["gid", gid]
   418  	part		fs_opt_hex["part", int32]
   419  	session		fs_opt_hex["session", int32]
   420  	type		fs_opt["type", array[int8, 4]]
   421  	creator		fs_opt["creator", array[int8, 4]]
   422  	codepage	fs_opt_codepage["codepage"]
   423  	iocharset	fs_opt_codepage["iocharset"]
   424  ] [varlen]
   425  
   426  hfsplus_options [
   427  	decompose	stringnoz["decompose"]
   428  	nodecompose	stringnoz["nodecompose"]
   429  	barrier		stringnoz["barrier"]
   430  	nobarrier	stringnoz["nobarrier"]
   431  	force		stringnoz["force"]
   432  	umask		fs_opt_oct["umask", int32]
   433  	type		fs_opt["type", array[int8, 4]]
   434  	creator		fs_opt["creator", array[int8, 4]]
   435  	uid		fs_opt_hex["uid", uid]
   436  	gid		fs_opt_hex["gid", gid]
   437  	part		fs_opt_hex["part", int32]
   438  	session		fs_opt_hex["session", int32]
   439  	nls		fs_opt_codepage["nls"]
   440  ] [varlen]
   441  
   442  iso9660_options [
   443  	norock		stringnoz["norock"]
   444  	nojoliet	stringnoz["nojoliet"]
   445  	unhide		stringnoz["unhide"]
   446  	hide		stringnoz["hide"]
   447  	cruft		stringnoz["cruft"]
   448  	utf8		stringnoz["utf8"]
   449  	map_acorn	stringnoz["map=acorn"]
   450  	map_normal	stringnoz["map=normal"]
   451  	map_off		stringnoz["map=off"]
   452  	check_relaxed	stringnoz["check=relaxed"]
   453  	check_strict	stringnoz["check=strict"]
   454  	overriderock	stringnoz["overriderockperm"]
   455  	nocompress	stringnoz["nocompress"]
   456  	session		fs_opt_hex["session", int32[0:98]]
   457  	sbsector	fs_opt_hex["sbsector", int32]
   458  	uid		fs_opt_hex["uid", uid]
   459  	gid		fs_opt_hex["gid", gid]
   460  	mode		fs_opt_hex["mode", int32]
   461  	dmode		fs_opt_hex["dmode", int32]
   462  	block		fs_opt_hex["block", flags[iso9660_blocks]]
   463  	iocharset	fs_opt_codepage["iocharset"]
   464  ] [varlen]
   465  
   466  iso9660_blocks = 512, 1024, 2048
   467  
   468  gfs2_options [
   469  	spectator		stringnoz["spectator"]
   470  	norecovery		stringnoz["norecovery"]
   471  	ignore_local_fs		stringnoz["ignore_local_fs"]
   472  	localflocks		stringnoz["localflocks"]
   473  	localcaching		stringnoz["localcaching"]
   474  	upgrade			stringnoz["upgrade"]
   475  	acl			stringnoz["acl"]
   476  	noacl			stringnoz["noacl"]
   477  	quota_off		stringnoz["quota=off"]
   478  	quota_account		stringnoz["quota=account"]
   479  	quota_on		stringnoz["quota=on"]
   480  	quota			stringnoz["quota"]
   481  	noquota			stringnoz["noquota"]
   482  	suiddir			stringnoz["suiddir"]
   483  	nosuiddir		stringnoz["nosuiddir"]
   484  	data_writeback		stringnoz["data=writeback"]
   485  	data_ordered		stringnoz["data=ordered"]
   486  	meta			stringnoz["meta"]
   487  	discard			stringnoz["discard"]
   488  	nodiscard		stringnoz["nodiscard"]
   489  	errors_withdraw		stringnoz["errors=withdraw"]
   490  	barrier			stringnoz["barrier"]
   491  	nobarrier		stringnoz["nobarrier"]
   492  	rgrplvb			stringnoz["rgrplvb"]
   493  	norgrplvb		stringnoz["norgrplvb"]
   494  	loccookie		stringnoz["loccookie"]
   495  	noloccookie		stringnoz["noloccookie"]
   496  	commit			fs_opt_hex["commit", int32]
   497  	statfs_quantum		fs_opt_hex["statfs_quantum", int32]
   498  	statfs_percent		fs_opt_hex["statfs_percent", int32]
   499  	quota_quantum		fs_opt_hex["quota_quantum", int32]
   500  	lockproto_dlm		stringnoz["lockproto=dlm"]
   501  	lockproto_nolock	stringnoz["lockproto=lock_nolock"]
   502  	locktable		fs_opt_str["locktable"]
   503  	hostdata		fs_opt_str["hostdata"]
   504  ] [varlen]
   505  
   506  jfs_options [
   507  	integrity	stringnoz["integrity"]
   508  	nointegrity	stringnoz["nointegrity"]
   509  	resize		stringnoz["resize"]
   510  	noquota		stringnoz["noquota"]
   511  	quota		stringnoz["quota"]
   512  	usrquota	stringnoz["usrquota"]
   513  	grpquota	stringnoz["grpquota"]
   514  	discard		stringnoz["discard"]
   515  	nodiscard	stringnoz["nodiscard"]
   516  	iocharset	fs_opt_codepage["iocharset"]
   517  	errors_continue	stringnoz["errors=continue"]
   518  	errors_remount	stringnoz["errors=remount-ro"]
   519  	resize_size	fs_opt_hex["resize", int32]
   520  	uid		fs_opt_hex["uid", uid]
   521  	gid		fs_opt_hex["gid", gid]
   522  	umask		fs_opt_hex["umask", int32]
   523  	discard_size	fs_opt_hex["discard", int32]
   524  ] [varlen]
   525  
   526  btrfs_options [
   527  	degraded		stringnoz["degraded"]
   528  	nodatasum		stringnoz["nodatasum"]
   529  	datasum			stringnoz["datasum"]
   530  	nodatacow		stringnoz["nodatacow"]
   531  	datacow			stringnoz["datacow"]
   532  	nobarrier		stringnoz["nobarrier"]
   533  	barrier			stringnoz["barrier"]
   534  	compress		stringnoz["compress"]
   535  	compress_force		stringnoz["compress-force"]
   536  	ssd			stringnoz["ssd"]
   537  	ssd_spread		stringnoz["ssd_spread"]
   538  	nossd_spread		stringnoz["nossd_spread"]
   539  	nossd			stringnoz["nossd"]
   540  	acl			stringnoz["acl"]
   541  	noacl			stringnoz["noacl"]
   542  	notreelog		stringnoz["notreelog"]
   543  	treelog			stringnoz["treelog"]
   544  	flushoncommit		stringnoz["flushoncommit"]
   545  	noflushoncommit		stringnoz["noflushoncommit"]
   546  	discard			stringnoz["discard"]
   547  	nodiscard		stringnoz["nodiscard"]
   548  	space_cache		stringnoz["space_cache"]
   549  	clear_cache		stringnoz["clear_cache"]
   550  	user_subvol_rm		stringnoz["user_subvol_rm_allowed"]
   551  	enospc_debug		stringnoz["enospc_debug"]
   552  	noenospc_debug		stringnoz["noenospc_debug"]
   553  	autodefrag		stringnoz["autodefrag"]
   554  	noautodefrag		stringnoz["noautodefrag"]
   555  	inode_cache		stringnoz["inode_cache"]
   556  	noinode_cache		stringnoz["noinode_cache"]
   557  	nospace_cache		stringnoz["nospace_cache"]
   558  	usebackuproot		stringnoz["usebackuproot"]
   559  	skip_balance		stringnoz["skip_balance"]
   560  	check_int		stringnoz["check_int"]
   561  	check_int_data		stringnoz["check_int_data"]
   562  	rescan_uuid_tree	stringnoz["rescan_uuid_tree"]
   563  	fragment_data		stringnoz["fragment=data"]
   564  	fragment_metadata	stringnoz["fragment=metadata"]
   565  	fragment_all		stringnoz["fragment=all"]
   566  	ref_verify		stringnoz["ref_verify"]
   567  	metadata_ratio		fs_opt_hex["metadata_ratio", int32]
   568  	check_int_print_mask	fs_opt_hex["check_int_print_mask", int32]
   569  	commit			fs_opt_hex["commit", int32]
   570  	thread_pool		fs_opt_hex["thread_pool", int32]
   571  	device			fs_opt_filename["device"]
   572  	subvolid		fs_opt_hex["subvolid", int64]
   573  	subvol			fs_opt_str["subvol"]
   574  	max_inline		fs_opt_dec_suffix["max_inline"]
   575  	compress_algo		fs_opt["compress", stringnoz[btrfs_compress_algos]]
   576  	compress_force_algo	fs_opt["compress-force", stringnoz[btrfs_compress_algos]]
   577  	space_cache_v1		stringnoz["space_cache=v1"]
   578  	space_cache_v2		stringnoz["space_cache=v2"]
   579  ] [varlen]
   580  
   581  btrfs_compress_algos = "zlib", "lzo", "zstd", "no"
   582  
   583  ntfs_options [
   584  	uid			fs_opt_hex["uid", uid]
   585  	gid			fs_opt_hex["gid", gid]
   586  	umask			fs_opt_oct["umask", int32]
   587  	fmask			fs_opt_oct["fmask", int32]
   588  	dmask			fs_opt_oct["dmask", int32]
   589  	mft_zone_multiplier	fs_opt_hex["mft_zone_multiplier", int32[-1:4]]
   590  	show_sys_files_no	stringnoz["show_sys_files=no"]
   591  	show_sys_files_yes	stringnoz["show_sys_files=yes"]
   592  	case_sensitive_no	stringnoz["case_sensitive=no"]
   593  	case_sensitive_yes	stringnoz["case_sensitive=yes"]
   594  	disable_sparse_no	stringnoz["disable_sparse=no"]
   595  	disable_sparse_yes	stringnoz["disable_sparse=yes"]
   596  	errors_remount		stringnoz["errors=remount-ro"]
   597  	errors_continue		stringnoz["errors=continue"]
   598  	errors_recover		stringnoz["errors=recover"]
   599  	nls			fs_opt_codepage["nls"]
   600  	utf8			stringnoz["utf8"]
   601  ] [varlen]
   602  
   603  ntfs3_options [
   604  	uid		fs_opt_hex["uid", uid]
   605  	gid		fs_opt_hex["gid", gid]
   606  	umask		fs_opt_oct["umask", int32]
   607  	fmask		fs_opt_oct["fmask", int32]
   608  	dmask		fs_opt_oct["dmask", int32]
   609  	noacsrules	stringnoz["noacsrules"]
   610  	nohidden	stringnoz["nohidden"]
   611  	sys_immutable	stringnoz["sys_immutable"]
   612  	discard		stringnoz["discard"]
   613  	force		stringnoz["force"]
   614  	sparse		stringnoz["sparse"]
   615  	showmeta	stringnoz["showmeta"]
   616  	prealloc	stringnoz["prealloc"]
   617  	acl		stringnoz["acl"]
   618  	iocharset	fs_opt_codepage["iocharset"]
   619  ] [varlen]
   620  
   621  ext4_options [
   622  	bsddf			stringnoz["bsddf"]
   623  	minixdf			stringnoz["minixdf"]
   624  	grpid			stringnoz["grpid"]
   625  	bsdgroups		stringnoz["bsdgroups"]
   626  	nogrpid			stringnoz["nogrpid"]
   627  	sysvgroups		stringnoz["sysvgroups"]
   628  	errors_continue		stringnoz["errors=continue"]
   629  	errors_remount		stringnoz["errors=remount-ro"]
   630  	nouid32			stringnoz["nouid32"]
   631  	debug			stringnoz["debug"]
   632  	oldalloc		stringnoz["oldalloc"]
   633  	orlov			stringnoz["orlov"]
   634  	user_xattr		stringnoz["user_xattr"]
   635  	nouser_xattr		stringnoz["nouser_xattr"]
   636  	acl			stringnoz["acl"]
   637  	noacl			stringnoz["noacl"]
   638  	norecovery		stringnoz["norecovery"]
   639  	noload			stringnoz["noload"]
   640  	nobh			stringnoz["nobh"]
   641  	bh			stringnoz["bh"]
   642  	journal_checksum	stringnoz["journal_checksum"]
   643  	nojournal_checksum	stringnoz["nojournal_checksum"]
   644  	journal_async_commit	stringnoz["journal_async_commit"]
   645  	abort			stringnoz["abort"]
   646  	data_journal		stringnoz["data=journal"]
   647  	data_ordered		stringnoz["data=ordered"]
   648  	data_writeback		stringnoz["data=writeback"]
   649  	data_err_abort		stringnoz["data_err=abort"]
   650  	data_err_ignore		stringnoz["data_err=ignore"]
   651  	usrjquota		stringnoz["usrjquota="]
   652  	grpjquota		stringnoz["grpjquota="]
   653  	jqfmt_vfsold		stringnoz["jqfmt=vfsold"]
   654  	jqfmt_vfsv0		stringnoz["jqfmt=vfsv0"]
   655  	jqfmt_vfsv1		stringnoz["jqfmt=vfsv1"]
   656  	grpquota		stringnoz["grpquota"]
   657  	noquota			stringnoz["noquota"]
   658  	quota			stringnoz["quota"]
   659  	usrquota		stringnoz["usrquota"]
   660  	prjquota		stringnoz["prjquota"]
   661  	barrier			stringnoz["barrier"]
   662  	nobarrier		stringnoz["nobarrier"]
   663  	i_version		stringnoz["i_version"]
   664  	dax			stringnoz["dax"]
   665  	delalloc		stringnoz["delalloc"]
   666  	lazytime		stringnoz["lazytime"]
   667  	nolazytime		stringnoz["nolazytime"]
   668  	nodelalloc		stringnoz["nodelalloc"]
   669  	mblk_io_submit		stringnoz["mblk_io_submit"]
   670  	nomblk_io_submit	stringnoz["nomblk_io_submit"]
   671  	block_validity		stringnoz["block_validity"]
   672  	noblock_validity	stringnoz["noblock_validity"]
   673  	auto_da_alloc		stringnoz["auto_da_alloc"]
   674  	noauto_da_alloc		stringnoz["noauto_da_alloc"]
   675  	dioread_nolock		stringnoz["dioread_nolock"]
   676  	dioread_lock		stringnoz["dioread_lock"]
   677  	discard			stringnoz["discard"]
   678  	nodiscard		stringnoz["nodiscard"]
   679  	init_itable		stringnoz["init_itable"]
   680  	noinit_itable		stringnoz["noinit_itable"]
   681  	test_dummy_encryption	stringnoz["test_dummy_encryption"]
   682  	nombcache		stringnoz["nombcache"]
   683  	resgid			fs_opt_hex["resgid", gid]
   684  	resuid			fs_opt_hex["resuid", uid]
   685  	sb			fs_opt_hex["sb", int32]
   686  	commit			fs_opt_hex["commit", int32]
   687  	min_batch_time		fs_opt_hex["min_batch_time", int32]
   688  	max_batch_time		fs_opt_hex["max_batch_time", int32]
   689  	journal_dev		fs_opt_hex["journal_dev", int32]
   690  	barrier_val		fs_opt_hex["barrier", int32]
   691  	stripe			fs_opt_hex["stripe", int32]
   692  	debug_want_extra_isize	fs_opt_hex["debug_want_extra_isize", int32]
   693  	inode_readahead_blks	fs_opt_hex["inode_readahead_blks", flags[ext4_inode_readahead_blks]]
   694  	journal_ioprio		fs_opt_hex["journal_ioprio", int32[0:7]]
   695  	auto_da_alloc_val	fs_opt_hex["auto_da_alloc", int32]
   696  	init_itable_val		fs_opt_hex["init_itable", int32]
   697  	max_dir_size_kb		fs_opt_hex["max_dir_size_kb", int32]
   698  	journal_path		fs_opt_filename["journal_path"]
   699  	grpjquota_path		fs_opt_filename["grpjquota"]
   700  	usrjquota_path		fs_opt_filename["usrjquota"]
   701  ] [varlen]
   702  
   703  ext4_types = "ext4", "ext3", "ext2"
   704  ext4_inode_readahead_blks = 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000, 0x20000, 0x40000, 0x80000, 0x100000, 0x200000, 0x400000, 0x800000, 0x1000000, 0x2000000, 0x4000000, 0x8000000
   705  
   706  f2fs_options [
   707  	background_gc_sync	stringnoz["background_gc=sync"]
   708  	background_gc_off	stringnoz["background_gc=off"]
   709  	background_gc_on	stringnoz["background_gc=on"]
   710  	disable_roll_forward	stringnoz["disable_roll_forward"]
   711  	norecovery		stringnoz["norecovery"]
   712  	discard			stringnoz["discard"]
   713  	nodiscard		stringnoz["nodiscard"]
   714  	noheap			stringnoz["noheap"]
   715  	heap			stringnoz["heap"]
   716  	user_xattr		stringnoz["user_xattr"]
   717  	nouser_xattr		stringnoz["nouser_xattr"]
   718  	acl			stringnoz["acl"]
   719  	noacl			stringnoz["noacl"]
   720  	six_active_logs		stringnoz["active_logs=6"]
   721  	four_active_logs	stringnoz["active_logs=4"]
   722  	two_active_logs		stringnoz["active_logs=2"]
   723  	disable_ext_identify	stringnoz["disable_ext_identify"]
   724  	inline_xattr		stringnoz["inline_xattr"]
   725  	noinline_xattr		stringnoz["noinline_xattr"]
   726  	inline_xattr_size	fs_opt_hex["inline_xattr_size", int32]
   727  	inline_data		stringnoz["inline_data"]
   728  	noinline_data		stringnoz["noinline_data"]
   729  	inline_dentry		stringnoz["inline_dentry"]
   730  	noinline_dentry		stringnoz["noinline_dentry"]
   731  	flush_merge		stringnoz["flush_merge"]
   732  	noflush_merge		stringnoz["noflush_merge"]
   733  	nobarrier		stringnoz["nobarrier"]
   734  	fastboot		stringnoz["fastboot"]
   735  	extent_cache		stringnoz["extent_cache"]
   736  	noextent_cache		stringnoz["noextent_cache"]
   737  	data_flush		stringnoz["data_flush"]
   738  	adaptive_mode		stringnoz["mode=adaptive"]
   739  	lfs_mode		stringnoz["mode=lfs"]
   740  	resgid			fs_opt_hex["resgid", gid]
   741  	resuid			fs_opt_hex["resuid", uid]
   742  	lazytime		stringnoz["lazytime"]
   743  	nolazytime		stringnoz["nolazytime"]
   744  	quota			stringnoz["quota"]
   745  	noquota			stringnoz["noquota"]
   746  	usrquota		fs_opt_str["usrquota"]
   747  	grpquota		fs_opt_str["grpquota"]
   748  	prjquota		fs_opt_str["prjquota"]
   749  	usrjquota		fs_opt_str["usrjquota"]
   750  	grpjquota		fs_opt_str["grpjquota"]
   751  	prjjquota		fs_opt_str["prjjquota"]
   752  	jqfmt_vfsold		stringnoz["jqfmt=vfsold"]
   753  	jqfmt_vfsv0		stringnoz["jqfmt=vfsv0"]
   754  	jqfmt_vfsv1		stringnoz["jqfmt=vfsv1"]
   755  	whint_mode_user		stringnoz["whint_mode=user-based"]
   756  	whint_mode_off		stringnoz["whint_mode=off"]
   757  	whint_mode_fs		stringnoz["whint_mode=fs-based"]
   758  	alloc_mode_def		stringnoz["alloc_mode=default"]
   759  	alloc_mode_reuse	stringnoz["alloc_mode=reuse"]
   760  	fsync_mode_posix	stringnoz["fsync_mode=posix"]
   761  	fsync_mode_strict	stringnoz["fsync_mode=strict"]
   762  	test_dummy_encryption	stringnoz["test_dummy_encryption"]
   763  	errors_continue		stringnoz["errors=continue"]
   764  	errors_remount		stringnoz["errors=remount-ro"]
   765  ] [varlen]
   766  
   767  bpf_options [
   768  	mode	fs_opt_oct["mode", int32]
   769  ] [varlen]
   770  
   771  overlay_options [
   772  	lowerdir		fs_opt_filename["lowerdir"]
   773  	upperdir		fs_opt_filename["upperdir"]
   774  	workdir			fs_opt_filename["workdir"]
   775  	redirect_dir		fs_opt_filename["redirect_dir"]
   776  	default_permissions	stringnoz["default_permissions"]
   777  	index_on		stringnoz["index=on"]
   778  	index_off		stringnoz["index=off"]
   779  	nfs_export_on		stringnoz["nfs_export=on"]
   780  	nfs_export_off		stringnoz["nfs_export=off"]
   781  	xino_on			stringnoz["xino=on"]
   782  	xino_off		stringnoz["xino=off"]
   783  	xino_auto		stringnoz["xino=auto"]
   784  	metacopy_on		stringnoz["metacopy=on"]
   785  	metacopy_off		stringnoz["metacopy=off"]
   786  ] [varlen]
   787  
   788  binder_options [
   789  	max	fs_opt_dec["max", int32[0:4]]
   790  	stats	stringnoz["stats=global"]
   791  ] [varlen]
   792  
   793  erofs_options [
   794  	user_xattr	stringnoz["user_xattr"]
   795  	nouser_xattr	stringnoz["nouser_xattr"]
   796  	acl		stringnoz["acl"]
   797  	noacl		stringnoz["noacl"]
   798  	fault_injection	fs_opt_hex["fault_injection", int32]
   799  ] [varlen]
   800  
   801  exfat_options [
   802  	uid		fs_opt_hex["uid", uid]
   803  	gid		fs_opt_hex["gid", gid]
   804  	umask		fs_opt_oct["umask", int32]
   805  	dmask		fs_opt_oct["dmask", int32]
   806  	fmask		fs_opt_oct["fmask", int32]
   807  	allow_utime	fs_opt_oct["allow_utime", int32]
   808  	codepage	fs_opt_codepage["codepage"]
   809  	iocharset	fs_opt_codepage["iocharset"]
   810  	namecase	stringnoz["namecase=1"]
   811  	errors_remount	stringnoz["errors=remount-ro"]
   812  	errors_continue	stringnoz["errors=continue"]
   813  	utf8		stringnoz["utf8"]
   814  	discard		stringnoz["discard"]
   815  ] [varlen]
   816  
   817  # TODO: afs should be configured via /proc/fs/afs/{cells,servers} (see fs/afs/proc.c).
   818  # Without that mounting of afs will fail.
   819  afs_source [
   820  	none	string["none"]
   821  	cell	afs_cell_source
   822  ] [varlen]
   823  
   824  afs_cell_source {
   825  	prefix	flags[afs_cell_prefix, int8]
   826  	cell	stringnoz[afs_cells]
   827  	volname	stringnoz[afs_volnames]
   828  	suffix	stringnoz[afs_suffixes]
   829  	z	const[0, int8]
   830  } [packed]
   831  
   832  afs_cell_prefix = '%', '#'
   833  afs_cells = "", "syz0:", "syz1:"
   834  afs_volnames = "syz0", "syz1"
   835  afs_suffixes = "", ".readonly", ".backup"
   836  
   837  afs_options [
   838  	autocell	stringnoz["autocell"]
   839  	dyn		stringnoz["dyn"]
   840  	flock_local	stringnoz["flock=local"]
   841  	flock_openafs	stringnoz["flock=openafs"]
   842  	flock_strict	stringnoz["flock=strict"]
   843  	flock_write	stringnoz["flock=write"]
   844  ] [varlen]
   845  
   846  tmpfs_options [
   847  	uid			fs_opt_hex["uid", uid]
   848  	gid			fs_opt_hex["gid", gid]
   849  	mode			fs_opt_oct["mode", int32]
   850  	nr_blocks		fs_opt_dec_suffix["nr_blocks"]
   851  	nr_inodes		fs_opt_dec_suffix["nr_inodes"]
   852  	size			fs_opt_dec_suffix["size"]
   853  	huge_never		stringnoz["huge=never"]
   854  	huge_always		stringnoz["huge=always"]
   855  	huge_within_size	stringnoz["huge=within_size"]
   856  	huge_advise		stringnoz["huge=advise"]
   857  	mpol			fs_opt["mpol", tmpfs_mpol]
   858  ] [varlen]
   859  
   860  tmpfs_mpol {
   861  	policy	stringnoz[tmpfs_mpol_policy]
   862  	flags	stringnoz[tmpfs_mpol_flags]
   863  	nodes	optional[tmpfs_mpol_nodes]
   864  } [packed]
   865  
   866  tmpfs_mpol_nodes {
   867  	colon	const[':', int8]
   868  	nodes	array[flags[tmpfs_mpol_node_chars, int8]]
   869  }
   870  
   871  tmpfs_mpol_policy = "default", "prefer", "bind", "interleave", "local"
   872  tmpfs_mpol_flags = "", "=static", "=relative"
   873  tmpfs_mpol_node_chars = '-', ':', '/', ',', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
   874  
   875  zonefs_options [
   876  	errors_zone_ro		stringnoz["errors=zone-ro"]
   877  	errors_zone_offline	stringnoz["errors=zone-offline"]
   878  	errors_repair		stringnoz["errors=repair"]
   879  	explicit_open		stringnoz["explicit-open"]
   880  ] [varlen]
   881  
   882  jffs2_options [
   883  	compr_none	stringnoz["compr=none"]
   884  	compr_lzo	stringnoz["compr=lzo"]
   885  	compr_zlib	stringnoz["compr=zlib"]
   886  	rp_size		fs_opt_dec["rp_size", int32]
   887  ] [varlen]
   888  
   889  nilfs2_options [
   890  	barrier		stringnoz["barrier"]
   891  	nobarrier	stringnoz["nobarrier"]
   892  	norecovery	stringnoz["norecovery"]
   893  	discard		stringnoz["discard"]
   894  	nodiscard	stringnoz["nodiscard"]
   895  	snapshot	fs_opt_hex["snapshot", int32[0:3]]
   896  	order_relaxed	stringnoz["order=relaxed"]
   897  	order_strict	stringnoz["order=strict"]
   898  ] [varlen]
   899  
   900  ubifs_options [
   901  	fast_unmount	stringnoz["fast_unmount"]
   902  	norm_unmount	stringnoz["norm_unmount"]
   903  	bulk_read	stringnoz["bulk_read"]
   904  	no_bulk_read	stringnoz["no_bulk_read"]
   905  	chk_data_crc	stringnoz["chk_data_crc"]
   906  	no_chk_data_crc	stringnoz["no_chk_data_crc"]
   907  	compr_none	stringnoz["compr=none"]
   908  	compr_lzo	stringnoz["compr=lzo"]
   909  	compr_zlib	stringnoz["compr=zlib"]
   910  	compr_zstd	stringnoz["compr=zstd"]
   911  	auth_key	fs_opt_str["auth_key"]
   912  	auth_hash_name	fs_opt["auth_hash_name", stringnoz[ubifs_auth_hash_name]]
   913  ] [varlen]
   914  
   915  # We could use more hash names, but the problem is that alg_hash_name is 0-terminated.
   916  ubifs_auth_hash_name = "crc32", "ghash", "md5", "sha1"
   917  
   918  udf_options [
   919  	novrs		stringnoz["novrs"]
   920  	nostrict	stringnoz["nostrict"]
   921  	unhide		stringnoz["unhide"]
   922  	undelete	stringnoz["undelete"]
   923  	noadinicb	stringnoz["noadinicb"]
   924  	adinicb		stringnoz["adinicb"]
   925  	shortad		stringnoz["shortad"]
   926  	longad		stringnoz["longad"]
   927  	utf8		stringnoz["utf8"]
   928  	iocharset	fs_opt_codepage["iocharset"]
   929  	uid_forget	stringnoz["uid=forget"]
   930  	uid_ignore	stringnoz["uid=ignore"]
   931  	gid_forget	stringnoz["gid=forget"]
   932  	gid_ignore	stringnoz["gid=ignore"]
   933  	gid		fs_opt_dec["gid", gid]
   934  	uid		fs_opt_dec["uid", uid]
   935  	umask		fs_opt_oct["umask", int32]
   936  	mode		fs_opt_oct["mode", int32]
   937  	dmode		fs_opt_oct["dmode", int32]
   938  	bs		fs_opt_dec["bs", int32]
   939  	session		fs_opt_dec["session", int32]
   940  	lastblock	fs_opt_dec["lastblock", int32]
   941  	anchor		fs_opt_dec["anchor", int32]
   942  	volume		fs_opt_dec["volume", int32]
   943  	partition	fs_opt_dec["partition", int32]
   944  	fileset		fs_opt_dec["fileset", int32]
   945  	rootdir		fs_opt_dec["rootdir", int32]
   946  ] [varlen]
   947  
   948  esdfs_options [
   949  	lower		fs_opt_str["lower"]
   950  	upper		fs_opt_str["upper"]
   951  	derive		fs_opt["derive", stringnoz[esdfs_derive]]
   952  	confine		stringnoz["confine"]
   953  	noconfine	stringnoz["noconfine"]
   954  	derive_gid	stringnoz["derive_gid"]
   955  	default_normal	stringnoz["default_normal"]
   956  	dl_loc		fs_opt_str["dl_loc"]
   957  	dl_uid		fs_opt_oct["dl_uid", uid]
   958  	dl_gid		fs_opt_oct["dl_gid", gid]
   959  	ns_fd		fs_opt_oct["ns_fd", fd_namespace]
   960  	fsuid		fs_opt_oct["fsuid", uid]
   961  	fsgid		fs_opt_oct["fsgid", gid]
   962  	gid		fs_opt_oct["gid", gid]
   963  	mask		fs_opt_oct["mask", int32]
   964  	userid		fs_opt_oct["userid", uid]
   965  	multiuser	stringnoz["multiuser"]
   966  ] [varlen]
   967  
   968  esdfs_derive = "none", "legacy", "unified", "multi", "public"
   969  
   970  bcachefs_options [
   971  	metadata_checksum	fs_opt["metadata_checksum", stringnoz[bcachefs_checksum]]
   972  	data_checksum		fs_opt["data_checksum", stringnoz[bcachefs_checksum]]
   973  	compression		fs_opt["compression", stringnoz[bcachefs_compression]]
   974  	background_compression	fs_opt["background_compression", stringnoz[bcachefs_compression]]
   975  	str_hash		fs_opt["str_hash", stringnoz[bcachefs_str_hash]]
   976  	nocow			stringnoz["nocow"]
   977  ] [varlen]
   978  
   979  bcachefs_checksum = "none", "crc32c", "crc64", "xxhash"
   980  bcachefs_compression = "none", "lz4", "gzip", "zstd"
   981  bcachefs_str_hash = "crc32c", "crc64", "siphash"
   982  
   983  cgroup_options [
   984  	all		stringnoz["all"]
   985  	clone_children	stringnoz["clone_children"]
   986  	cpuset_v2_mode	stringnoz["cpuset_v2_mode"]
   987  	name		fs_opt_str["name"]
   988  	none		stringnoz["none"]
   989  	noprefix	stringnoz["noprefix"]
   990  	release_agent	fs_opt_filename["release_agent"]
   991  	xattr		stringnoz["xattr"]
   992  	subsystem	stringnoz[cgroup_subsystems]
   993  ] [varlen]
   994  
   995  cgroup2_options [
   996  	nsdelegate		stringnoz["nsdelegate"]
   997  	memory_localevents	stringnoz["memory_localevents"]
   998  	memory_recursiveprot	stringnoz["memory_recursiveprot"]
   999  	subsystem		stringnoz[cgroup_subsystems]
  1000  ] [varlen]
  1001  
  1002  codepage_nums = "1250", "1251", "1255", "437", "737", "775", "850", "852", "855", "857", "860", "861", "862", "863", "864", "865", "866", "869", "874", "932", "936", "949", "950"
  1003  codepages_names = "macceltic", "maccenteuro", "maccroatian", "maccyrillic", "macgaelic", "macgreek", "maciceland", "macinuit", "macroman", "macromanian", "macturkish", "ascii", "default", "cp1250", "cp1251", "cp1255", "cp437", "cp737", "cp775", "cp850", "cp852", "cp855", "cp857", "cp860", "cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp874", "cp932", "cp936", "cp949", "cp950", "euc-jp", "iso8859-13", "iso8859-14", "iso8859-15", "iso8859-1", "iso8859-2", "iso8859-3", "iso8859-4", "iso8859-5", "iso8859-6", "iso8859-7", "iso8859-9", "koi8-r", "koi8-ru", "koi8-u", "utf8", "none"
  1004  mount_flags = MS_BIND, MS_DIRSYNC, MS_MANDLOCK, MS_MOVE, MS_NOATIME, MS_NODEV, MS_NODIRATIME, MS_NOEXEC, MS_NOSUID, MS_RDONLY, MS_RELATIME, MS_REMOUNT, MS_SILENT, MS_STRICTATIME, MS_SYNCHRONOUS, MS_REC, MS_POSIXACL, MS_UNBINDABLE, MS_PRIVATE, MS_SLAVE, MS_SHARED, MS_I_VERSION, MS_LAZYTIME
  1005  umount_flags = MNT_FORCE, MNT_DETACH, MNT_EXPIRE, UMOUNT_NOFOLLOW