From 4586e8ffb5eb56235e4446e790352dacc462e0a2 Mon Sep 17 00:00:00 2001 From: semarie Date: Fri, 9 Oct 2015 11:38:05 +0000 Subject: [PATCH] add "tty" regress for pledge --- regress/sys/kern/pledge/generic/Makefile | 6 +- regress/sys/kern/pledge/generic/main.c | 7 +- regress/sys/kern/pledge/generic/manager.c | 4 +- regress/sys/kern/pledge/generic/test_tty.c | 80 ++++++++++++++++++++++ regress/sys/kern/pledge/generic/tests.out | 3 +- 5 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 regress/sys/kern/pledge/generic/test_tty.c diff --git a/regress/sys/kern/pledge/generic/Makefile b/regress/sys/kern/pledge/generic/Makefile index 28f2da0f1c7..9d4f7a4dca5 100644 --- a/regress/sys/kern/pledge/generic/Makefile +++ b/regress/sys/kern/pledge/generic/Makefile @@ -1,6 +1,6 @@ -# $OpenBSD: Makefile,v 1.1 2015/10/09 06:44:13 semarie Exp $ +# $OpenBSD: Makefile,v 1.2 2015/10/09 11:38:05 semarie Exp $ PROG= generic -SRCS+= main.c manager.c +SRCS+= main.c manager.c test_tty.c NOMAN= yes CFLAGS+= -Wall -Werror @@ -15,7 +15,7 @@ test_systrace: ${PROG} systrace -A ./${PROG} | diff -I OpenBSD -u ${.CURDIR}/tests.out - regenerate: ${PROG} - echo '# $$OpenBSD: Makefile,v 1.1 2015/10/09 06:44:13 semarie Exp $$' > ${.CURDIR}/tests.out + echo '# $$OpenBSD: Makefile,v 1.2 2015/10/09 11:38:05 semarie Exp $$' > ${.CURDIR}/tests.out ./${PROG} | tee -a ${.CURDIR}/tests.out .include diff --git a/regress/sys/kern/pledge/generic/main.c b/regress/sys/kern/pledge/generic/main.c index 23fbbcb9edd..d9285d8c702 100644 --- a/regress/sys/kern/pledge/generic/main.c +++ b/regress/sys/kern/pledge/generic/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.1 2015/10/09 06:44:13 semarie Exp $ */ +/* $OpenBSD: main.c,v 1.2 2015/10/09 11:38:05 semarie Exp $ */ /* * Copyright (c) 2015 Sebastien Marie * @@ -37,6 +37,8 @@ #include "manager.h" +void test_request_tty(void); + static void test_nop() { @@ -334,5 +336,8 @@ main(int argc, char *argv[]) start_test1(&ret, "rpath malloc prot_exec", "/dev/zero", test_mmap); start_test1(&ret, "rpath malloc", "/dev/zero", test_mmap); + /* tty */ + start_test(&ret, NULL, NULL, test_request_tty); + return (ret); } diff --git a/regress/sys/kern/pledge/generic/manager.c b/regress/sys/kern/pledge/generic/manager.c index 800316aed68..1f5ead155e4 100644 --- a/regress/sys/kern/pledge/generic/manager.c +++ b/regress/sys/kern/pledge/generic/manager.c @@ -1,4 +1,4 @@ -/* $OpenBSD: manager.c,v 1.1 2015/10/09 06:44:13 semarie Exp $ */ +/* $OpenBSD: manager.c,v 1.2 2015/10/09 11:38:05 semarie Exp $ */ /* * Copyright (c) 2015 Sebastien Marie * @@ -186,7 +186,7 @@ _start_test(int *ret, const char *test_name, const char *request, } else printf("NULL)"); } else - printf("not-called"); + printf("skip"); /* unlink previous coredump (if exists) */ if (clear_coredump(ret, test_name) == -1) diff --git a/regress/sys/kern/pledge/generic/test_tty.c b/regress/sys/kern/pledge/generic/test_tty.c new file mode 100644 index 00000000000..24561497921 --- /dev/null +++ b/regress/sys/kern/pledge/generic/test_tty.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2015 Sebastien Marie + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + + +void +test_request_tty() +{ + int fd = STDERR_FILENO; + struct termios ts; /* sys/termios.h */ + struct winsize ws; /* sys/ttycom.h */ + + /* TODO: get a tty */ + + /* tests that need tty+proc (malloc for self) */ + if (pledge("tty proc malloc", NULL) == -1) + _exit(errno); + + /* TIOCSPGRP (tty+proc) */ + if ((tcsetpgrp(fd, 1) == -1) && (errno != ENOTTY)) + _exit(errno); + errno = 0; /* discard error */ + + /* tests that only need tty */ + if (pledge("tty", NULL) == -1) + _exit(errno); + + + /* TIOCGETA */ + if (ioctl(fd, TIOCGETA, &ts) == -1) + _exit(errno); + + /* TIOCGWINSZ */ + if (ioctl(fd, TIOCGWINSZ, &ws) == -1) + _exit(errno); + + /* TIOCSBRK */ + if ((ioctl(fd, TIOCSBRK, NULL) == -1) && (errno != ENOTTY)) + _exit(errno); + errno = 0; /* discard error */ + + /* TIOCCDTR */ + if ((ioctl(fd, TIOCCDTR, NULL) == -1) && (errno != ENOTTY)) + _exit(errno); + errno = 0; /* discard error */ + + /* TIOCSETA */ + if (tcsetattr(fd, TCSANOW, &ts) == -1) + _exit(errno); + + /* TIOCSETAW */ + if (tcsetattr(fd, TCSADRAIN, &ts) == -1) + _exit(errno); + + /* TIOCSETAF */ + if (tcsetattr(fd, TCSAFLUSH, &ts) == -1) + _exit(errno); +} diff --git a/regress/sys/kern/pledge/generic/tests.out b/regress/sys/kern/pledge/generic/tests.out index 5fc8fd7e192..f4048d8edb5 100644 --- a/regress/sys/kern/pledge/generic/tests.out +++ b/regress/sys/kern/pledge/generic/tests.out @@ -1,4 +1,4 @@ -# $OpenBSD: tests.out,v 1.1 2015/10/09 06:44:13 semarie Exp $ +# $OpenBSD: tests.out,v 1.2 2015/10/09 11:38:05 semarie Exp $ test(test_nop): pledge=("",NULL) status=0 exit=0 test(test_inet): pledge=("",NULL) status=9 signal=9 pledged_syscall=97 test(test_inet): pledge=("abort",NULL) status=134 signal=6 coredump=present pledged_syscall=97 @@ -102,3 +102,4 @@ test(test_stat): pledge=("stdio rpath",{"/usr/share/man",NULL}) status=0 exit=0 test(test_mmap): pledge=("rpath malloc prot_exec",{"/dev/zero",NULL}) status=0 exit=0 test(test_mmap): pledge=("rpath malloc",{"/dev/zero",NULL}) status=9 signal=9 pledged_syscall=197 +test(test_request_tty): pledge=skip status=0 exit=0 -- 2.20.1