| # 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/mman.h> |
| include <sys/stat.h> |
| include <fcntl.h> |
| include <unistd.h> |
| include <mqueue.h> |
| include <poll.h> |
| include <sys/socket.h> |
| include <sys/uio.h> |
| include <sys/param.h> |
| include <sys/mount.h> |
| include <sys/resource.h> |
| include <time.h> |
| include <signal.h> |
| include <sys/wait.h> |
| include <linux/linux.h> |
| include <compat/linux/linux_event.h> |
| |
| pipe(pipefd ptr[out, pipefd]) |
| |
| sendfile(fdout fd, fdin fd, off ptr[inout, fileoff[int64], opt], count int64) |
| |
| stat(file ptr[in, filename], statbuf ptr[out, stat]) |
| lstat(file ptr[in, filename], statbuf ptr[out, stat]) |
| |
| poll(fds ptr[in, array[pollfd]], nfds len[fds], timeout int32) |
| ppoll(fds ptr[in, array[pollfd]], nfds len[fds], tsp ptr[in, timespec], sigmask ptr[in, sigset], size len[sigmask]) |
| select(n len[inp], inp ptr[inout, fd_set], outp ptr[inout, fd_set], exp ptr[inout, fd_set], tvp ptr[inout, timeval]) |
| |
| mincore(addr vma, size len[addr], vec buffer[out]) |
| |
| fcntl$dupfd(fd fd, cmd flags[fcntl_dupfd], arg fd) fd |
| fcntl$getflags(fd fd, cmd flags[fcntl_getflags]) |
| fcntl$setflags(fd fd, cmd const[F_SETFD], flags flags[fcntl_flags]) |
| fcntl$setstatus(fd fd, cmd const[F_SETFL], flags flags[fcntl_status]) |
| fcntl$lock(fd fd, cmd flags[fcntl_lock], lock ptr[in, flock]) |
| fcntl$getown(fd fd, cmd const[F_GETOWN]) pid |
| fcntl$setown(fd fd, cmd const[F_SETOWN], pid pid) |
| |
| mknod(file ptr[in, filename], mode flags[mknod_mode], dev int32) |
| mknod$loop(file ptr[in, filename], mode flags[mknod_mode], dev proc[1792, 2]) |
| mknodat(dirfd fd_dir, file ptr[in, filename], mode flags[mknod_mode], dev int32) |
| chmod(file ptr[in, filename], mode flags[open_mode]) |
| fchmod(fd fd, mode flags[open_mode]) |
| fchmodat(dirfd fd_dir, file ptr[in, filename], mode flags[open_mode]) |
| chown(file ptr[in, filename], uid uid, gid gid) |
| lchown(file ptr[in, filename], uid uid, gid gid) |
| fchown(fd fd, uid uid, gid gid) |
| fchownat(dirfd fd_dir, file ptr[in, filename], uid uid, gid gid, flags flags[at_flags]) |
| faccessat(dirfd fd_dir, pathname ptr[in, filename], mode flags[open_mode], flags flags[faccessat_flags]) |
| utimes(filename ptr[in, filename], times ptr[in, itimerval]) |
| futimesat(dir fd_dir, pathname ptr[in, filename], times ptr[in, itimerval]) |
| utimensat(dir fd_dir, pathname ptr[in, filename], times ptr[in, itimerval], flags flags[utimensat_flags]) |
| |
| execve(file ptr[in, filename], argv ptr[in, array[ptr[in, string]]], envp ptr[in, array[ptr[in, string]]]) |
| |
| getgid() gid |
| getegid() gid |
| setuid(uid uid) |
| setgid(gid gid) |
| getuid() uid |
| geteuid() uid |
| setpgid(pid pid, pgid pid) |
| getpgid(pid pid) pid |
| getpgrp(pid pid) pid |
| getpid() pid |
| setreuid(ruid uid, euid uid) |
| setregid(rgid gid, egid gid) |
| setresuid(ruid uid, euid uid, suid uid) |
| setresgid(rgid gid, egid gid, sgid gid) |
| getresuid(ruid ptr[out, uid], euid ptr[out, uid], suid ptr[out, uid]) |
| getresgid(rgid ptr[out, gid], egid ptr[out, gid], sgid ptr[out, gid]) |
| getgroups(size len[list], list ptr[inout, array[gid]]) |
| setgroups(size len[list], list ptr[in, array[gid]]) |
| |
| link(old ptr[in, filename], new ptr[in, filename]) |
| linkat(oldfd fd_dir, old ptr[in, filename], newfd fd_dir, new ptr[in, filename], flags flags[linkat_flags]) |
| symlinkat(old ptr[in, filename], newfd fd_dir, new ptr[in, filename]) |
| symlink(old ptr[in, filename], new ptr[in, filename]) |
| unlink(path ptr[in, filename]) |
| unlinkat(fd fd_dir, path ptr[in, filename], flags flags[unlinkat_flags]) |
| readlink(path ptr[in, filename], buf buffer[out], siz len[buf]) |
| readlinkat(fd fd_dir, path ptr[in, filename], buf buffer[out], siz len[buf]) |
| rename(old ptr[in, filename], new ptr[in, filename]) |
| renameat(oldfd fd_dir, old ptr[in, filename], newfd fd_dir, new ptr[in, filename]) |
| mkdir(path ptr[in, filename], mode flags[open_mode]) |
| mkdirat(fd fd_dir, path ptr[in, filename], mode flags[open_mode]) |
| rmdir(path ptr[in, filename]) |
| truncate(file ptr[in, filename], len intptr) |
| ftruncate(fd fd, len intptr) |
| flock(fd fd, op flags[flock_op]) |
| fsync(fd fd) |
| fdatasync(fd fd) |
| sync() |
| getdents(fd fd_dir, ent buffer[out], count len[ent]) |
| chroot(dir ptr[in, filename]) |
| getcwd(buf buffer[out], size len[buf]) |
| chdir(dir ptr[in, filename]) |
| fchdir(fd fd) |
| |
| getrusage(who flags[rusage_who], usage ptr[out, rusage]) |
| getrlimit(res flags[rlimit_type], rlim ptr[out, rlimit]) |
| setrlimit(res flags[rlimit_type], rlim ptr[in, rlimit]) |
| |
| clock_gettime(id flags[clock_id], tp ptr[out, timespec]) |
| clock_settime(id flags[clock_id], tp ptr[in, timespec]) |
| clock_getres(id flags[clock_id], tp ptr[out, timespec]) |
| clock_nanosleep(id flags[clock_id], flags flags[timer_flags], rqtp ptr[in, timespec], rmtp ptr[out, timespec, opt]) |
| sigaltstack(ss vma, oss ptr[out, intptr, opt]) |
| nanosleep(req ptr[in, timespec], rem ptr[out, timespec, opt]) |
| getitimer(which flags[getitimer_which], cur ptr[out, itimerval]) |
| setitimer(which flags[getitimer_which], new ptr[in, itimerval], old ptr[out, itimerval, opt]) |
| exit(code intptr) |
| wait4(pid pid, status ptr[out, int32, opt], options flags[wait_options], ru ptr[out, rusage, opt]) |
| |
| pollfd { |
| fd fd |
| events flags[pollfd_events, int16] |
| revents const[0, int16] |
| } |
| |
| sigset { |
| mask int64 |
| } |
| |
| timespec { |
| sec intptr |
| nsec intptr |
| } |
| |
| timeval { |
| sec intptr |
| usec intptr |
| } |
| |
| itimerval { |
| interv timeval |
| value timeval |
| } |
| |
| # TODO: fd_set needs to be a separate type |
| fd_set { |
| mask0 int64 |
| mask1 int64 |
| mask2 int64 |
| mask3 int64 |
| mask4 int64 |
| mask5 int64 |
| mask6 int64 |
| mask7 int64 |
| } |
| |
| rusage { |
| utime timeval |
| stime timeval |
| maxrss intptr |
| ixrss intptr |
| idrss intptr |
| isrss intptr |
| minflt intptr |
| majflt intptr |
| nswap intptr |
| inblock intptr |
| oublock intptr |
| msgsnd intptr |
| msgrcv intptr |
| signals intptr |
| nvcsw intptr |
| nivcsw intptr |
| } |
| |
| rlimit { |
| soft intptr |
| hard intptr |
| } |
| |
| flock { |
| type flags[flock_type, int16] |
| whence flags[seek_whence, int16] |
| start intptr |
| len intptr |
| pid pid |
| } |
| |
| linger { |
| onoff int32 |
| linger int32 |
| } |
| |
| ucred { |
| pid pid |
| uid uid |
| gid gid |
| } |
| |
| pollfd_events = POLLIN, POLLPRI, POLLOUT, POLLERR, POLLHUP, POLLNVAL, POLLRDNORM, POLLRDBAND, POLLWRNORM, POLLWRBAND, POLLINIGNEOF |
| mknod_mode = S_IFREG, S_IFCHR, S_IFBLK, S_IFIFO, S_IFSOCK, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH |
| at_flags = AT_SYMLINK_NOFOLLOW, AT_SYMLINK_FOLLOW |
| linkat_flags = AT_SYMLINK_FOLLOW |
| unlinkat_flags = 0, AT_REMOVEDIR |
| flock_op = LOCK_SH, LOCK_EX, LOCK_UN, LOCK_NB |
| faccessat_flags = 0x100, 0x200, 0x400, 0x800, 0x1000 |
| rusage_who = RUSAGE_SELF, RUSAGE_CHILDREN, RUSAGE_THREAD |
| rlimit_type = RLIMIT_AS, RLIMIT_CORE, RLIMIT_CPU, RLIMIT_DATA, RLIMIT_FSIZE, RLIMIT_MEMLOCK, RLIMIT_NOFILE, RLIMIT_NPROC, RLIMIT_RSS, RLIMIT_STACK |
| clock_id = CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_PROCESS_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID |
| getitimer_which = ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF |
| wait_options = WNOHANG, WUNTRACED, WCONTINUED, WEXITED, WSTOPPED, WCONTINUED, WNOHANG, WNOWAIT |
| timer_flags = 0, TIMER_ABSTIME |
| utimensat_flags = 0, AT_SYMLINK_NOFOLLOW |
| fcntl_dupfd = F_DUPFD, F_DUPFD_CLOEXEC |
| fcntl_getflags = F_GETFD, F_GETFL |
| fcntl_lock = F_SETLK, F_SETLKW, F_GETLK |
| fcntl_flags = FD_CLOEXEC |
| fcntl_status = O_APPEND, FASYNC, O_DIRECT, O_NONBLOCK |
| flock_type = F_RDLCK, F_WRLCK, F_UNLCK |