From 9b6360c7d7719cf9600ab6ac78bfbf6432c86699 Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 16 Dec 2017 11:00:49 +0000 Subject: [PATCH] execpromise regress --- regress/sys/kern/pledge/execpromise/Makefile | 39 +++++++++ .../sys/kern/pledge/execpromise/execpromise.c | 82 +++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 regress/sys/kern/pledge/execpromise/Makefile create mode 100644 regress/sys/kern/pledge/execpromise/execpromise.c diff --git a/regress/sys/kern/pledge/execpromise/Makefile b/regress/sys/kern/pledge/execpromise/Makefile new file mode 100644 index 00000000000..cfa4db647d2 --- /dev/null +++ b/regress/sys/kern/pledge/execpromise/Makefile @@ -0,0 +1,39 @@ +# $OpenBSD: Makefile,v 1.1 2017/12/16 11:00:49 florian Exp $ + +PROG= execpromise + +test_normal: ${PROG} + @echo '\n======== $@ ========' + ${.OBJDIR}/${PROG} "stdio rpath inet" "stdio inet" +REGRESS_TARGETS+= test_normal + +test_no_child_pledge: ${PROG} + @echo '\n======== $@ ========' + ${.OBJDIR}/${PROG} "stdio rpath inet" +REGRESS_TARGETS+= test_no_child_pledge + +test_abort_child: ${PROG} + @echo '\n======== $@ ========' + -${.OBJDIR}/${PROG} "stdio rpath"; \ + if [[ $$? == 134 ]] ; then echo OK; else false; fi +REGRESS_TARGETS+= test_abort_child + +test_ENOSYS_child: ${PROG} + @echo '\n======== $@ ========' + -${.OBJDIR}/${PROG} "stdio rpath error"; \ + if [[ $$? == 23 ]] ; then echo OK; else false; fi +REGRESS_TARGETS+= test_ENOSYS_child + +test_upgrade_fail: ${PROG} + @echo '\n======== $@ ========' + -${.OBJDIR}/${PROG} "stdio rpath inet" "stdio inet wpath"; \ + if [[ $$? == 24 ]] ; then echo OK; else false; fi +REGRESS_TARGETS+= test_upgrade_fail + +test_upgrade_ignore: ${PROG} + @echo '\n======== $@ ========' + ${.OBJDIR}/${PROG} "stdio rpath inet error" "stdio rpath wpath inet" +REGRESS_TARGETS+= test_upgrade_ignore + + +.include diff --git a/regress/sys/kern/pledge/execpromise/execpromise.c b/regress/sys/kern/pledge/execpromise/execpromise.c new file mode 100644 index 00000000000..50ba587f364 --- /dev/null +++ b/regress/sys/kern/pledge/execpromise/execpromise.c @@ -0,0 +1,82 @@ +/* $OpenBSD: execpromise.c,v 1.1 2017/12/16 11:00:49 florian Exp $ */ +/* + * Copyright (c) 2017 Florian Obser + * + * 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 + +int +main(int argc, char **argv) +{ + int ch, child = 0, s; + char **oargv = argv; + + while ((ch = getopt(argc, argv, "C")) != -1) { + switch (ch) { + case 'C': + child = 1; + break; + default: + errx(1, ""); + } + } + argc -= optind; + argv += optind; + + if (child ==1) { + warnx("child"); + if (argc > 1) + errx(1, "argc: %d", argc); + if (argc == 1) { + warnx("plege(\"%s\",\"\")", argv[0]); + if (pledge(argv[0], "") == -1) + err(24, "child pledge"); + } + + warnx("trying to open socket"); + + s = socket(AF_INET, SOCK_DGRAM, 0); + if (s == -1) + err(23, "open"); + else + warnx("opened socket"); + + close(s); + exit(0); + } else { + warnx("parent"); + if (argc == 2) + warnx("execpromise: \"%s\", child pledge: \"%s\"", + argv[0], argv[1]); + else if (argc == 1) + warnx("execpromise: \"%s\"", argv[0]); + else + errx(1, "argc out of range"); + + if (pledge("stdio exec", argv[0]) == -1) + err(1, "parent pledge"); + + oargv[1] = "-C"; + execvp(oargv[0], &oargv[0]); + err((errno == ENOENT) ? 127 : 126, "%s", argv[0]); + } +} -- 2.20.1