# This file is used to populate seccomp's whitelist policy in combination with SYSCALLS.TXT.
# Note that the resultant policy is applied only to zygote spawned processes.
#
# Each non-blank, non-comment line has the following format:
#
# return_type func_name[|alias_list][:syscall_name[:socketcall_id]]([parameter_list]) arch_list
#
# where:
#       arch_list ::= "all" | arch+
#       arch      ::= "arm" | "arm64" | "mips" | "mips64" | "x86" | "x86_64"
#
# Note:
#      - syscall_name corresponds to the name of the syscall, which may differ from
#        the exported function name (example: the exit syscall is implemented by the _exit()
#        function, which is not the same as the standard C exit() function which calls it)

#      - alias_list is optional comma separated list of function aliases
#
#      - The call_id parameter, given that func_name and syscall_name have
#        been provided, allows the user to specify dispatch style syscalls.
#        For example, socket() syscall on i386 actually becomes:
#          socketcall(__NR_socket, 1, *(rest of args on stack)).
#
#      - Each parameter type is assumed to be stored in 32 bits.
#
# This file is processed by a python script named genseccomp.py.

# syscalls needed to boot android
int	pivot_root:pivot_root(const char *new_root, const char *put_old)	arm64,x86_64,mips64
int	ioprio_get:ioprio_get(int which, int who)	arm64,x86_64,mips64
int	ioprio_set:ioprio_set(int which, int who, int ioprio)	arm64,x86_64,mips64
pid_t	gettid:gettid()	all
int	futex:futex(int *uaddr, int futex_op, int val, const struct timespec *timeout, int *uaddr2, int val3)	all
int	clone:clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ..) all
int	sigreturn:sigreturn(unsigned long __unused)	arm,x86,mips
int	rt_sigreturn:rt_sigreturn(unsigned long __unused)	all
int	rt_tgsigqueueinfo:int rt_tgsigqueueinfo(pid_t tgid, pid_t tid, int sig, siginfo_t *uinfo)	all
int	restart_syscall:int restart_syscall()	all
int	fstatat64|fstatat:newfstatat(int, const char*, struct stat*, int)	mips64
int	fstat64|fstat:fstat(int, struct stat*)	mips64
int	_flush_cache:cacheflush(char* addr, const int nbytes, const int op)	mips64

# vfork is used by java.lang.ProcessBuilder
pid_t	vfork:vfork()	arm,x86,x86_64

# Needed for performance tools
int	perf_event_open:perf_event_open(struct perf_event_attr *attr, pid_t pid, int cpu, int group_fd, unsigned long flags)	all

# Needed for strace
int	tkill:tkill(int tid, int sig)	all

# b/34763393
int	seccomp:seccomp(unsigned int operation, unsigned int flags, void *args)	all

# Needed for debugging 32-bit Chrome
int	pipe:pipe(int pipefd[2])	arm,x86,mips

# Needed by breakpad (b/34813887).
int	open:open(const char *path, int oflag, ... ) arm,x86,x86_64,mips
int	getdents:getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count) arm,x86,x86_64,mips

# Needed by sanitizers (b/34606909, b/136777266).
int open:open(const char*, int, ...)  arm,x86,x86_64
int stat64:stat64(const char*, struct stat64*)  arm,x86
ssize_t readlink:readlink(const char*, char*, size_t)  arm,x86,x86_64

#
# Useful new syscalls which we don't yet use in bionic.
#

# Since Linux 2.5, not in glibc.
int io_setup(unsigned nr, aio_context_t *ctxp) all
int io_destroy(aio_context_t ctx) all
int io_submit(aio_context_t ctx, long nr,  struct iocb **iocbpp) all
int io_getevents(aio_context_t ctx, long min_nr, long max_nr, struct io_event *events, struct timespec *timeout) all
int io_cancel(aio_context_t ctx, struct iocb *, struct io_event *result) all
# Since Linux 3.14, not in glibc.
int sched_getattr(pid_t pid, struct sched_attr* attr, unsigned int flags) all
int sched_setattr(pid_t pid, struct sched_attr* attr, unsigned int size, unsigned int flags) all
# Since Linux 3.19, not in glibc (and not really needed to implement fexecve).
int execveat(int dirfd, const char* pathname, char* const* argv, char* const* envp, int flags)  all
# Since Linux 4.3, not in glibc. Probed for and conditionally used by ART.
int membarrier(int cmd, int flags) all
# Since Linux 4.5, glibc 2.27.
ssize_t copy_file_range(int fd_in, loff_t* off_in, int fd_out, loff_t* off_out, size_t len, unsigned int flags) all
# Since Linux 4.6, glibc 2.26.
ssize_t preadv2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) all
ssize_t pwritev2(int fd, const struct iovec* iov, int iovcnt, off_t offset, int flags) all
# Since Linux 4.11, glibc 2.30.
int statx(int, const char*, int, unsigned int, statx*) all
# Since Linux 5.1, not in glibc.
int clock_gettime64(clockid_t, timespec64*) lp32
int clock_settime64(clockid_t, const timespec64*) lp32
int clock_adjtime64(clockid_t, timex64*) lp32
int clock_getres_time64(clockid_t, timespec64*) lp32
int clock_nanosleep_time64(clockid_t, int, const timespec64*, timespec*) lp32
int timer_gettime64(__kernel_timer_t, itimerspec64*) lp32
int timer_settime64(__kernel_timer_t, int, const itimerspec64*, itimerspec64*) lp32
int timerfd_gettime64(int, itimerspec64*) lp32
int timerfd_settime64(int, int, const itimerspec64*, itimerspec64*) lp32
int utimensat_time64(int, const char*, const timespec64[2], int) lp32
int pselect6_time64(int, fd_set*, fd_set*, timespec64*, void*) lp32
int ppoll_time64(pollfd*, unsigned int, timespec64*, const sigset64_t*, size_t) lp32
int recvmmsg_time64(int, mmsghdr*, unsigned int, int, const timespec64*) lp32
int semtimedop_time64(int, sembuf*, size_t, const timespec64*) lp32
int rt_sigtimedwait_time64(const sigset64_t*, siginfo_t*, const timespec64*, size_t) lp32
int futex_time64(int*, int, int, const timespec64*, int*, int) lp32
int sched_rr_get_interval_time64(pid_t, timespec64*) lp32
