summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryasuoka <yasuoka@openbsd.org>2018-12-05 05:04:12 +0000
committeryasuoka <yasuoka@openbsd.org>2018-12-05 05:04:12 +0000
commit1e6179e5e9ccfa9125e557745154eac16846493d (patch)
tree7e08c6d052c9c2f16411e49aa368af7e85afdb05
parentDelete an unused struct member that has hid out here for 17 years (diff)
downloadwireguard-openbsd-1e6179e5e9ccfa9125e557745154eac16846493d.tar.xz
wireguard-openbsd-1e6179e5e9ccfa9125e557745154eac16846493d.zip
Unbreak "savecore -c". Also add missing unveil(2) for the raw device.
ok mestre
-rw-r--r--sbin/savecore/savecore.c39
1 files changed, 24 insertions, 15 deletions
diff --git a/sbin/savecore/savecore.c b/sbin/savecore/savecore.c
index 53257574006..b72a474c2e5 100644
--- a/sbin/savecore/savecore.c
+++ b/sbin/savecore/savecore.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: savecore.c,v 1.59 2018/09/28 14:03:14 mestre Exp $ */
+/* $OpenBSD: savecore.c,v 1.60 2018/12/05 05:04:12 yasuoka Exp $ */
/* $NetBSD: savecore.c,v 1.26 1996/03/18 21:16:05 leo Exp $ */
/*-
@@ -171,20 +171,24 @@ main(int argc, char *argv[])
(void)time(&now);
kmem_setup();
- if (unveil(dirn, "rwc") == -1) {
- syslog(LOG_ERR, "unveil: %m");
- exit(1);
- }
- if (unveil(kernel ? kernel : _PATH_UNIX, "r") == -1) {
- syslog(LOG_ERR, "unveil: %m");
- exit(1);
- }
- if (pledge("stdio rpath wpath cpath", NULL) == -1) {
- syslog(LOG_ERR, "pledge: %m");
- exit(1);
- }
-
- if (clear) {
+ if (!clear) {
+ if (unveil(dirn, "rwc") == -1) {
+ syslog(LOG_ERR, "unveil: %m");
+ exit(1);
+ }
+ if (unveil(kernel ? kernel : _PATH_UNIX, "r") == -1) {
+ syslog(LOG_ERR, "unveil: %m");
+ exit(1);
+ }
+ if (unveil(rawname(ddname), "r") == -1) {
+ syslog(LOG_ERR, "unveil: %m");
+ exit(1);
+ }
+ if (pledge("stdio rpath wpath cpath", NULL) == -1) {
+ syslog(LOG_ERR, "pledge: %m");
+ exit(1);
+ }
+ } else {
clear_dump();
return (0);
}
@@ -375,6 +379,11 @@ dump_exists(void)
void
clear_dump(void)
{
+ if (pledge("stdio", NULL) == -1) {
+ syslog(LOG_ERR, "pledge: %m");
+ exit(1);
+ }
+
if (kvm_dump_inval(kd_dump) == -1)
syslog(LOG_ERR, "%s: kvm_clear_dump: %s", ddname,
kvm_geterr(kd_dump));