blob: fab2472eab7527b4ea4781bd946cd182e00f93a8 [file] [log] [blame] [edit]
# Copyright 2017 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 <sys/types.h>
include <sys/fstypes.h>
include <sys/mount.h>
include <sys/statvfs.h>
include <sys/param.h>
include <sys/stat.h>
include <sys/ucred.h>
include <fcntl.h>
include <unistd.h>
resource fd[int32]: 0xffffffffffffffff, AT_FDCWD
resource fd_dir[fd]
resource pid[int32]: 0, 0xffffffffffffffff
resource uid[int32]: 0, 0xffffffffffffffff
resource gid[int32]: 0, 0xffffffffffffffff
resource dev[int64]: 0, 0xffffffffffffffff
type mode int32
type ino int64
type nlink int32
compat_43_ocreat(path ptr[in, filename], mode flags[open_mode])
open(file ptr[in, filename], flags flags[open_flags], mode flags[open_mode]) fd
# Just so that we have something that creates fd_dir resources.
open$dir(file ptr[in, filename], flags flags[open_flags], mode flags[open_mode]) fd_dir
openat(fd fd_dir[opt], file ptr[in, filename], flags flags[open_flags], mode flags[open_mode]) fd
close(fd fd)
read(fd fd, buf buffer[out], count len[buf])
readv(fd fd, vec ptr[in, array[iovec_out]], vlen len[vec])
pread(fd fd, buf buffer[in], nbyte len[buf], off fileoff)
preadv(fd fd, vec ptr[in, array[iovec_out]], vlen len[vec], off fileoff)
write(fd fd, buf buffer[in], count len[buf])
writev(fd fd, vec ptr[in, array[iovec_in]], vlen len[vec])
pwrite(fd fd, buf buffer[in], nbyte len[buf], off fileoff)
pwritev(fd fd, vec ptr[in, array[iovec_in]], vlen len[vec], off fileoff)
lseek(fd fd, pad const[0], offset fileoff, whence flags[seek_whence])
compat_43_olseek(fd fd, offset fileoff[int64], whence flags[seek_whence])
dup(oldfd fd) fd
dup2(oldfd fd, newfd fd) fd
dup3(oldfd fd, newfd fd, flags flags[dup_flags]) fd
pipe2(pipefd ptr[out, pipefd], flags flags[pipe_flags])
pathconf(file ptr[in, filename], name flags[conf_value])
fpathconf(fd fd, name flags[conf_value])
compat_40_mount(type ptr[in, string[filesystem_types]], path ptr[in, filename], flags flags[mount_flags], data buffer[in])
__mount50(type ptr[in, string[filesystem_types]], path ptr[in, filename], flags flags[mount_flags], data buffer[in], len len[data])
unmount(path ptr[in, filename], flags flags[mount_flags])
compat_90_statvfs1(path ptr[in, filename], buf ptr[out, statvfs90], f flags[vfs_flags])
compat_90_fstatvfs1(fd fd, buf ptr[out, statvfs90], f flags[vfs_flags])
compat_30_getfh(path ptr[in, filename], fhp ptr[out, compat_30_fhandle])
__getfh30(fname ptr[in, filename], fhp buffer[out], fh_size ptr[in, intptr])
compat_30_fhopen(fhp ptr[in, compat_30_fhandle], f flags[fhopen_flags]) fd
__fhopen40(fhp buffer[in], fh_size len[fhp], f flags[fhopen_flags]) fd
compat_30_fhstat(fhp ptr[in, compat_30_fhandle], sb ptr[out, stat13])
compat_30___fhstat30(fhp ptr[in, compat_30_fhandle], sb ptr[out, stat30])
__fhstat50(fhp buffer[in], fh_size len[fhp], sb ptr[out, stat])
compat_30_fhstatvfs1(fhp ptr[in, compat_30_fhandle], buf ptr[out, statvfs90], f flags[vfs_flags])
compat_90_fhstatvfs1(fhp buffer[in], fh_size len[fhp], buf ptr[out, statvfs90], f flags[vfs_flags])
__fhstatvfs190(fhp buffer[in], fh_size len[fhp], buf ptr[out, statvfs], f flags[vfs_flags])
compat_90_getvfsstat(buf ptr[out, statvfs90, opt], bufsize len[buf], f flags[vfs_flags])
__getvfsstat90(buf ptr[out, statvfs, opt], bufsize len[buf], flags flags[vfs_flags])
compat_20_getfsstat(buf ptr[out, statfs12, opt], size len[buf], f flags[getfsstat_flags])
pipefd {
rfd fd
wfd fd
}
iovec_in {
addr buffer[in]
len len[addr, intptr]
}
iovec_out {
addr buffer[out]
len len[addr, intptr]
}
stat {
st_dev dev
st_mode mode
st_ino ino
st_nlink nlink
st_uid uid
st_gid gid
st_rdev dev
st_atim timespec
st_mtim timespec
st_ctim timespec
st_birthtim timespec
st_size intptr
st_blocks intptr
st_blksize int32
st_flags int32
st_gen int32
st_spare array[int32, 2]
}
stat12 {
dev int32
ino int32
mode int16
nlink int16
uid uid
gid gid
rdev int32
atim timespec50
mtim timespec50
ctim timespec50
size int32
blocks int64
blksize int32
flags int32
gen int32
lspare int32
qspare array[int64, 2]
}
stat13 {
st_dev int32
st_ino int32
st_mode mode
st_nlink nlink
st_uid int32
st_gid int32
st_rdev int32
st_atim timespec50
st_mtim timespec50
st_ctim timespec50
st_size intptr
st_blocks intptr
st_blksize int32
st_flags int32
st_gen int32
st_spare0 int32
st_birthtim timespec50
}
stat30 {
st_dev int32
st_mode mode
st_ino intptr
st_nlink nlink
st_uid int32
st_gid int32
st_rdev int32
st_atim timespec50
st_mtim timespec50
st_ctim timespec50
st_birthtim timespec50
st_size intptr
st_blocks intptr
st_blksize int32
st_flags int32
st_gen int32
st_spare array[int32, 2]
}
stat43 {
dev int16
ino int32
mode int16
nlink int16
uid int16
gid int16
rdev int16
size int32
atim timespec50
mtim timespec50
ctim timespec50
blksize int32
blocks int32
flags int32
gen int32
}
define MFSNAMELEN 16
define MNAMELEN 90
statfs12 {
type int16
oflags int16
bsize intptr
iosize intptr
blocks intptr
bfree intptr
bavail intptr
files intptr
ffree intptr
fsid fsid_t
owner uid
flags flags[mount_flags, intptr]
swrites intptr
aswrites intptr
spare array[intptr, 1]
fstype array[int8, MFSNAMELEN]
mnton array[int8, MNAMELEN]
mntfrom array[int8, MNAMELEN]
}
fsid_t {
val array[int32, 2]
}
compat_30_fhandle {
fh_fsid fsid_t
fh_fid compat_30_fid
}
compat_30_fid {
fid_len int16
fid_reserved int16
fid_data array[int8, 16]
}
statvfs90 {
f_flag flags[statvfs_flags, int64]
f_bsize intptr
f_frsize intptr
f_iosize intptr
f_blocks intptr
f_bfree intptr
f_bavail intptr
f_bresvd intptr
f_files intptr
f_ffree intptr
f_favail intptr
f_fresvd intptr
f_syncreads intptr
f_syncwrites intptr
f_asyncreads intptr
f_asyncwrites intptr
f_fsidx fsid_t
f_fsid intptr
f_namemax intptr
f_owner int32
f_spare array[int32, 4]
f_fstypename array[int8, 32]
f_mntonname array[int8, 1024]
f_mntfromname array[int8, 1024]
}
statvfs {
f_flag flags[statvfs_flags, int64]
f_bsize intptr
f_frsize intptr
f_iosize intptr
f_blocks intptr
f_bfree intptr
f_bavail intptr
f_bresvd intptr
f_files intptr
f_ffree intptr
f_favail intptr
f_fresvd intptr
f_syncreads intptr
f_syncwrites intptr
f_asyncreads intptr
f_asyncwrites intptr
f_fsidx fsid_t
f_fsid intptr
f_namemax intptr
f_owner int32
f_spare array[intptr, 4]
f_fstypename array[int8, 32]
f_mntonname array[int8, 1024]
f_mntfromname array[int8, 1024]
f_mntfromlabel array[int8, 1024]
}
filesystem_types = "ffs", "nfs", "mfs", "msdos", "lfs", "fdesc", "null", "overlay", "umap", "kernfs", "procfs", "afs", "cd9660", "union", "adosfs", "ext2fs", "coda", "filecore", "ntfs", "smbfs", "ptyfs", "tmpfs", "udf", "sysvbfs", "puffs", "hfs", "efs", "zfs", "nilfs", "rumpfs", "v7fs", "autofs"
open_flags = O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, O_CREAT, O_TRUNC, O_EXCL, O_SHLOCK, O_EXLOCK, O_NOFOLLOW, O_CLOEXEC, O_NOSIGPIPE, O_DSYNC, O_SYNC, O_RSYNC, O_ALT_IO, O_NOCTTY, O_DIRECT, O_DIRECTORY, O_ASYNC
open_mode = S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH, S_ISUID, S_ISGID, S_ISVTX
seek_whence = SEEK_SET, SEEK_CUR, SEEK_END
pipe_flags = O_NONBLOCK, O_CLOEXEC, O_NOSIGPIPE
mount_flags = MNT_RDONLY, MNT_SYNCHRONOUS, MNT_NOEXEC, MNT_NOSUID, MNT_NODEV, MNT_UNION, MNT_ASYNC, MNT_NOCOREDUMP, MNT_RELATIME, MNT_IGNORE, MNT_DISCARD, MNT_EXTATTR, MNT_LOG, MNT_NOATIME, MNT_AUTOMOUNTED, MNT_SYMPERM, MNT_NODEVMTIME, MNT_SOFTDEP, MNT_EXRDONLY, MNT_EXPORTED, MNT_DEFEXPORTED, MNT_EXPORTANON, MNT_EXKERB, MNT_EXNORESPORT, MNT_EXPUBLIC, MNT_LOCAL, MNT_QUOTA, MNT_ROOTFS
getfsstat_flags = MNT_NOWAIT, MNT_WAIT, MNT_LAZY
conf_value = _PC_LINK_MAX, _PC_MAX_CANON, _PC_MAX_INPUT, _PC_NAME_MAX, _PC_PATH_MAX, _PC_PIPE_BUF, _PC_CHOWN_RESTRICTED, _PC_NO_TRUNC, _PC_VDISABLE, _PC_SYNC_IO, _PC_FILESIZEBITS, _PC_SYMLINK_MAX, _PC_2_SYMLINKS, _PC_ACL_EXTENDED, _PC_MIN_HOLE_SIZE, _PC_ACL_PATH_MAX, _PC_ACL_NFS4
fhopen_flags = O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, O_TRUNC, O_EXCL, O_SHLOCK, O_EXLOCK, O_NOFOLLOW, O_CLOEXEC, O_NOSIGPIPE, O_DSYNC, O_SYNC, O_RSYNC, O_ALT_IO, O_NOCTTY, O_DIRECT, O_DIRECTORY, O_ASYNC
vfs_flags = ST_NOWAIT, ST_WAIT
statvfs_flags = ST_RDONLY, ST_NOEXEC, ST_NOSUID, ST_NODEV, ST_UNION, ST_SYNCHRONOUS, ST_ASYNC, ST_NOCOREDUMP, ST_NOATIME, ST_SYMPERM, ST_NODEVMTIME, ST_LOG, ST_LOCAL, ST_QUOTA, ST_ROOTFS, ST_EXRDONLY, ST_EXPORTED, ST_DEFEXPORTED, ST_EXPORTANON, ST_EXKERB, ST_EXNORESPORT, ST_EXPUBLIC