From dca08cedf0e95302882fc69fab39e9d01054b130 Mon Sep 17 00:00:00 2001 From: dgl Date: Sat, 28 Mar 2026 07:23:57 +0000 Subject: [PATCH] Test that __pledge_open can bypass unveil. --- regress/sys/kern/pledge/open/Makefile | 6 +++++- regress/sys/kern/pledge/open/open.c | 14 +++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/regress/sys/kern/pledge/open/Makefile b/regress/sys/kern/pledge/open/Makefile index 3af30b95f47..f8e16b0204a 100644 --- a/regress/sys/kern/pledge/open/Makefile +++ b/regress/sys/kern/pledge/open/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.1 2026/03/27 05:06:33 dgl Exp $ +# $OpenBSD: Makefile,v 1.2 2026/03/28 07:23:57 dgl Exp $ PROG= open LDFLAGS= -static @@ -34,6 +34,10 @@ run-devnull: ${PROG} ./${PROG} "stdio" /dev/null REGRESS_TARGETS+= run-devnull +run-devnull-unveil: ${PROG} + ./${PROG} "stdio" /dev/null / "" +REGRESS_TARGETS+= run-devnull-unveil + run-empty-promises: ${PROG} if ./${PROG} "" /dev/null; \ then false; else [[ $$? == 134 ]]; fi diff --git a/regress/sys/kern/pledge/open/open.c b/regress/sys/kern/pledge/open/open.c index 0f78ec59008..832b544df65 100644 --- a/regress/sys/kern/pledge/open/open.c +++ b/regress/sys/kern/pledge/open/open.c @@ -1,4 +1,4 @@ -/* $OpenBSD: open.c,v 1.1 2026/03/27 05:06:33 dgl Exp $ */ +/* $OpenBSD: open.c,v 1.2 2026/03/28 07:23:57 dgl Exp $ */ /* * Copyright (c) 2026 David Leadbeater * @@ -33,16 +33,24 @@ int _libc___pledge_open(char *path, int flags, ...); int main(int argc, char **argv) { - int fd; + int fd, i; char *promise, *path; struct stat sb; - if (argc != 3) + if (argc < 3) errx(1, "argc: %d", argc); promise = argv[1]; path = argv[2]; + if (((argc - 3) % 2) != 0) + errx(1, "unveil(x, y) must be balanced"); + + for (i = 3; i < argc; i += 2) { + if (unveil(argv[i], argv[i+1]) == -1) + err(1, "unveil(%s, %s)", argv[i], argv[i+1]); + } + if (strcmp(promise, NO_PLEDGE) != 0 && pledge(promise, NULL) == -1) err(1, "pledge %s", promise);