summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikeb <mikeb@openbsd.org>2015-12-22 22:19:46 +0000
committermikeb <mikeb@openbsd.org>2015-12-22 22:19:46 +0000
commitcedcacc751f15cc660bd1fd4515dbf68c8f75e73 (patch)
treea54b5d16b77b0e4825f9a3f40541a3289b6e1eb8
parentImplement a bus_dma(9) abstraction on top of Grant Table API (diff)
downloadwireguard-openbsd-cedcacc751f15cc660bd1fd4515dbf68c8f75e73.tar.xz
wireguard-openbsd-cedcacc751f15cc660bd1fd4515dbf68c8f75e73.zip
Make xs_setprop a bit more useful by removing property nodes
when NULL or zero length value was specified.
-rw-r--r--sys/dev/pv/xenstore.c22
-rw-r--r--sys/dev/pv/xenvar.h3
2 files changed, 15 insertions, 10 deletions
diff --git a/sys/dev/pv/xenstore.c b/sys/dev/pv/xenstore.c
index 45d1664be9d..fa749149f1d 100644
--- a/sys/dev/pv/xenstore.c
+++ b/sys/dev/pv/xenstore.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xenstore.c,v 1.10 2015/12/22 22:16:53 mikeb Exp $ */
+/* $OpenBSD: xenstore.c,v 1.11 2015/12/22 22:19:46 mikeb Exp $ */
/*
* Copyright (c) 2015 Mike Belopuhov
@@ -699,6 +699,7 @@ xs_cmd(struct xs_transaction *xst, int cmd, const char *path,
ov_cnt++;
break;
case XS_TCLOSE:
+ case XS_RM:
case XS_WRITE:
mode = WRITE;
/* FALLTHROUGH */
@@ -719,7 +720,6 @@ xs_cmd(struct xs_transaction *xst, int cmd, const char *path,
ov[ov_cnt].iov_base = (*iov)[i].iov_base;
ov[ov_cnt].iov_len = (*iov)[i].iov_len;
}
- KASSERT(ov_cnt < nitems(ov));
}
xsm = xs_get_msg(xs, !(xst->xst_flags & XST_POLL));
@@ -832,12 +832,16 @@ xs_setprop(struct xen_attach_args *xa, const char *property, char *value,
if (cold)
xst.xst_flags = XST_POLL;
- iov.iov_base = value;
- iov.iov_len = size;
- iov_cnt = 1;
+ if (value && size > 0) {
+ iov.iov_base = value;
+ iov.iov_len = size;
+ iov_cnt = 1;
- snprintf(path, sizeof(path), "%s/%s", xa->xa_node, property);
- if ((error = xs_cmd(&xst, XS_WRITE, path, &iovp, &iov_cnt)) != 0)
- return (error);
- return (0);
+ snprintf(path, sizeof(path), "%s/%s", xa->xa_node, property);
+ error = xs_cmd(&xst, XS_WRITE, path, &iovp, &iov_cnt);
+ } else {
+ snprintf(path, sizeof(path), "%s/%s", xa->xa_node, property);
+ error = xs_cmd(&xst, XS_RM, path, NULL, NULL);
+ }
+ return (error);
}
diff --git a/sys/dev/pv/xenvar.h b/sys/dev/pv/xenvar.h
index 2d693d5eb07..0689ff6036c 100644
--- a/sys/dev/pv/xenvar.h
+++ b/sys/dev/pv/xenvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: xenvar.h,v 1.16 2015/12/22 22:16:53 mikeb Exp $ */
+/* $OpenBSD: xenvar.h,v 1.17 2015/12/22 22:19:46 mikeb Exp $ */
/*
* Copyright (c) 2015 Mike Belopuhov
@@ -121,6 +121,7 @@ int xen_intr_unmask(xen_intr_handle_t);
#define XS_TOPEN 0x06
#define XS_TCLOSE 0x07
#define XS_WRITE 0x0b
+#define XS_RM 0x0d
#define XS_ERROR 0x10
#define XS_MAX 0x16