aboutsummaryrefslogtreecommitdiffstats
path: root/executor
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-11-16 19:14:05 +0100
committerDmitry Vyukov <dvyukov@google.com>2015-11-16 19:14:05 +0100
commit6892001bbc38e19c6f06cf9e78390962b007bc4f (patch)
tree835227d2296bbbbcce282251567d4cd993db06b7 /executor
parent3716eb38300268c5400907f4e2178a5d96440d59 (diff)
add tty-related ioctl's
Diffstat (limited to 'executor')
-rw-r--r--executor/executor.cc19
-rw-r--r--executor/syscalls.h97
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},
};