diff options
author | Alexander Bluhm <bluhm@cvs.openbsd.org> | 2019-08-01 15:20:52 +0000 |
---|---|---|
committer | Alexander Bluhm <bluhm@cvs.openbsd.org> | 2019-08-01 15:20:52 +0000 |
commit | 75532bdb153f63a353fdcbc5d647364d1f0223d1 (patch) | |
tree | 63bb7d2b3e6cf322685d99bcd8e82c2a8817c5db /regress/sys/kern/unveil-unmount/unveil-unlink.c | |
parent | 601bcd1dc134d4246855db4c576ce05ad026e35a (diff) |
Call unveil(2) in combination with unlink(2) and chroot(2).
Use umount(8) to check that the mountpoint leaks no vnode.
Diffstat (limited to 'regress/sys/kern/unveil-unmount/unveil-unlink.c')
-rw-r--r-- | regress/sys/kern/unveil-unmount/unveil-unlink.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/regress/sys/kern/unveil-unmount/unveil-unlink.c b/regress/sys/kern/unveil-unmount/unveil-unlink.c new file mode 100644 index 00000000000..cf59e3b3b45 --- /dev/null +++ b/regress/sys/kern/unveil-unmount/unveil-unlink.c @@ -0,0 +1,50 @@ +/* $OpenBSD: unveil-unlink.c,v 1.1.1.1 2019/08/01 15:20:51 bluhm Exp $ */ +/* + * Copyright (c) 2019 Alexander Bluhm <bluhm@openbsd.org> + * + * 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 <err.h> +#include <fcntl.h> +#include <stdio.h> +#include <unistd.h> + +int +main(int argc, char *argv[]) +{ + char *dir, *file, *path; + int fd; + + if (argc != 3) + errx(2, "usage: unveil-unlink dir file"); + + dir = argv[1]; + file = argv[2]; + if (asprintf(&path, "%s/%s", dir, file) == -1) + err(1, "asprintf"); + + fd = open(path, O_WRONLY|O_CREAT, 0755); + if (fd == -1) + err(1, "open %s", dir); + close(fd); + + if (unveil(dir, "r") == -1) + err(1, "unveil %s", dir); + if (unveil(NULL, NULL) == -1) + err(1, "unveil NULL"); + if (unlink(path) == 0) + errx(1, "unlink %s succeeded", path); + + return 0; +} |