# This file is used to populate seccomp's allowlist policy in combination with SYSCALLS.TXT.
# Note that the resultant policy is applied only to zygote spawned processes.
#
# 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)	lp64
int	ioprio_get:ioprio_get(int which, int who)	lp64
int	ioprio_set:ioprio_set(int which, int who, int ioprio)	lp64
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)	lp32
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

# 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 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
# Needed by ubsan in T? (http://b/229989971)
int stat(const char*, struct stat*)  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 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
# Since Linux 5.4, not in glibc. Probed for and conditionally used by ART.
int userfaultfd(int) all
# Since Linux 5.9, used by POSIX_SPAWN_CLOEXEC_DEFAULT
int close_range(unsigned int, unsigned int, int) all
