diff options
Diffstat (limited to 'executor')
| -rw-r--r-- | executor/executor.cc | 19 | ||||
| -rw-r--r-- | executor/syscalls.h | 97 |
2 files changed, 114 insertions, 2 deletions
diff --git a/executor/executor.cc b/executor/executor.cc index 2c2aa9841..4fb75660c 100644 --- a/executor/executor.cc +++ b/executor/executor.cc @@ -20,6 +20,7 @@ #include <sys/mman.h> #include <sys/wait.h> #include <linux/futex.h> +#include <sys/ioctl.h> #include <pthread.h> #include <grp.h> #include <algorithm> @@ -177,7 +178,7 @@ int main() kill(pid, SIGKILL); } int status = 0; - if (waitpid(pid, &status, 0) != pid) + if (waitpid(pid, &status, __WALL|WUNTRACED) != pid) fail("waitpid failed"); status = WEXITSTATUS(status); if (status == kFailStatus) @@ -405,7 +406,21 @@ void execute_call(thread_t* th) fail("inconsistent number of arguments"); cover_reset(th); - th->res = syscall(call->sys_nr, th->args[0], th->args[1], th->args[2], th->args[3], th->args[4], th->args[5]); + switch (call->sys_nr) { + default: { + th->res = syscall(call->sys_nr, th->args[0], th->args[1], th->args[2], th->args[3], th->args[4], th->args[5]); + break; + } + case __NR_syz_openpts: { + int ptyno = 0; + if (ioctl(th->args[0], TIOCGPTN, &ptyno) == 0) { + char buf[128]; + sprintf(buf, "/dev/pts/%d", ptyno); + th->res = open(buf, th->args[1], 0); + } else { + th->res = -1; + } + }} int errno0 = errno; th->cover_size = cover_read(th); diff --git a/executor/syscalls.h b/executor/syscalls.h index 30cbf8d8e..1a7ff5d81 100644 --- a/executor/syscalls.h +++ b/executor/syscalls.h @@ -10,6 +10,8 @@ struct call_t { #define __NR_memfd_create 319 #endif +#define __NR_syz_openpts 1000001 + call_t syscalls[] = { {"open", __NR_open}, {"openat", __NR_openat}, @@ -409,4 +411,99 @@ call_t syscalls[] = { {"ioctl$kdbus_list", __NR_ioctl}, {"ioctl$kdbus_match_add", __NR_ioctl}, {"ioctl$kdbus_match_remove", __NR_ioctl}, + {"open$ptmx", __NR_open}, + {"syz_openpts", __NR_syz_openpts}, + {"ioctl$TCGETS", __NR_ioctl}, + {"ioctl$TCSETS", __NR_ioctl}, + {"ioctl$TCSETSW", __NR_ioctl}, + {"ioctl$TCSETSF", __NR_ioctl}, + {"ioctl$TCGETA", __NR_ioctl}, + {"ioctl$TCSETA", __NR_ioctl}, + {"ioctl$TCSETAW", __NR_ioctl}, + {"ioctl$TCSETAF", __NR_ioctl}, + {"ioctl$TIOCGLCKTRMIOS", __NR_ioctl}, + {"ioctl$TIOCSLCKTRMIOS", __NR_ioctl}, + {"ioctl$TIOCGWINSZ", __NR_ioctl}, + {"ioctl$TIOCSWINSZ", __NR_ioctl}, + {"ioctl$TCSBRK", __NR_ioctl}, + {"ioctl$TCSBRKP", __NR_ioctl}, + {"ioctl$TIOCSBRK", __NR_ioctl}, + {"ioctl$TIOCCBRK", __NR_ioctl}, + {"ioctl$TCXONC", __NR_ioctl}, + {"ioctl$FIONREAD", __NR_ioctl}, + {"ioctl$TIOCOUTQ", __NR_ioctl}, + {"ioctl$TCFLSH", __NR_ioctl}, + {"ioctl$TIOCSTI", __NR_ioctl}, + {"ioctl$TIOCCONS", __NR_ioctl}, + {"ioctl$TIOCSCTTY", __NR_ioctl}, + {"ioctl$TIOCNOTTY", __NR_ioctl}, + {"ioctl$TIOCGPGRP", __NR_ioctl}, + {"ioctl$TIOCSPGRP", __NR_ioctl}, + {"ioctl$TIOCGSID", __NR_ioctl}, + {"ioctl$TIOCEXCL", __NR_ioctl}, + {"ioctl$TIOCNXCL", __NR_ioctl}, + {"ioctl$TIOCGETD", __NR_ioctl}, + {"ioctl$TIOCSETD", __NR_ioctl}, + {"ioctl$TIOCPKT", __NR_ioctl}, + {"ioctl$TIOCMGET", __NR_ioctl}, + {"ioctl$TIOCMSET", __NR_ioctl}, + {"ioctl$TIOCMBIC", __NR_ioctl}, + {"ioctl$TIOCMBIS", __NR_ioctl}, + {"ioctl$TIOCGSOFTCAR", __NR_ioctl}, + {"ioctl$TIOCSSOFTCAR", __NR_ioctl}, + {"ioctl$TIOCTTYGSTRUCT", __NR_ioctl}, + {"ioctl$KDGETLED", __NR_ioctl}, + {"ioctl$KDSETLED", __NR_ioctl}, + {"ioctl$KDGKBLED", __NR_ioctl}, + {"ioctl$KDSKBLED", __NR_ioctl}, + {"ioctl$KDGKBTYPE", __NR_ioctl}, + {"ioctl$KDADDIO", __NR_ioctl}, + {"ioctl$KDDELIO", __NR_ioctl}, + {"ioctl$KDENABIO", __NR_ioctl}, + {"ioctl$KDDISABIO", __NR_ioctl}, + {"ioctl$KDSETMODE", __NR_ioctl}, + {"ioctl$KDGETMODE", __NR_ioctl}, + {"ioctl$KDMKTONE", __NR_ioctl}, + {"ioctl$KIOCSOUND", __NR_ioctl}, + {"ioctl$GIO_CMAP", __NR_ioctl}, + {"ioctl$PIO_CMAP", __NR_ioctl}, + {"ioctl$GIO_FONT", __NR_ioctl}, + {"ioctl$GIO_FONTX", __NR_ioctl}, + {"ioctl$PIO_FONT", __NR_ioctl}, + {"ioctl$PIO_FONTX", __NR_ioctl}, + {"ioctl$PIO_FONTRESET", __NR_ioctl}, + {"ioctl$GIO_SCRNMAP", __NR_ioctl}, + {"ioctl$GIO_UNISCRNMAP", __NR_ioctl}, + {"ioctl$PIO_SCRNMAP", __NR_ioctl}, + {"ioctl$PIO_UNISCRNMAP", __NR_ioctl}, + {"ioctl$GIO_UNIMAP", __NR_ioctl}, + {"ioctl$PIO_UNIMAP", __NR_ioctl}, + {"ioctl$PIO_UNIMAPCLR", __NR_ioctl}, + {"ioctl$KDGKBMODE", __NR_ioctl}, + {"ioctl$KDSKBMODE", __NR_ioctl}, + {"ioctl$KDGKBMETA", __NR_ioctl}, + {"ioctl$KDSKBMETA", __NR_ioctl}, + {"ioctl$KDGKBENT", __NR_ioctl}, + {"ioctl$KDGKBSENT", __NR_ioctl}, + {"ioctl$KDSKBSENT", __NR_ioctl}, + {"ioctl$KDGKBDIACR", __NR_ioctl}, + {"ioctl$KDGETKEYCODE", __NR_ioctl}, + {"ioctl$KDSETKEYCODE", __NR_ioctl}, + {"ioctl$KDSIGACCEPT", __NR_ioctl}, + {"ioctl$VT_OPENQRY", __NR_ioctl}, + {"ioctl$VT_GETMODE", __NR_ioctl}, + {"ioctl$VT_SETMODE", __NR_ioctl}, + {"ioctl$VT_GETSTATE", __NR_ioctl}, + {"ioctl$VT_RELDISP", __NR_ioctl}, + {"ioctl$VT_ACTIVATE", __NR_ioctl}, + {"ioctl$VT_WAITACTIVE", __NR_ioctl}, + {"ioctl$VT_DISALLOCATE", __NR_ioctl}, + {"ioctl$VT_RESIZE", __NR_ioctl}, + {"ioctl$VT_RESIZEX", __NR_ioctl}, + {"ioctl$TIOCLINUX2", __NR_ioctl}, + {"ioctl$TIOCLINUX3", __NR_ioctl}, + {"ioctl$TIOCLINUX4", __NR_ioctl}, + {"ioctl$TIOCLINUX5", __NR_ioctl}, + {"ioctl$TIOCLINUX6", __NR_ioctl}, + {"ioctl$TIOCLINUX7", __NR_ioctl}, }; |
