summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikeb <mikeb@openbsd.org>2017-07-17 16:32:26 +0000
committermikeb <mikeb@openbsd.org>2017-07-17 16:32:26 +0000
commit6a831e9aa3d1f76955fe95cfed45d6e67c12c135 (patch)
tree62b97f5d9ee18c61d99b3254b95698ba5da899f8
parentNuke findproto() and get_ifa(). They are unused now that (diff)
downloadwireguard-openbsd-6a831e9aa3d1f76955fe95cfed45d6e67c12c135.tar.xz
wireguard-openbsd-6a831e9aa3d1f76955fe95cfed45d6e67c12c135.zip
Forbid overwriting a grant table entry currently in use
-rw-r--r--sys/dev/pv/xen.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/pv/xen.c b/sys/dev/pv/xen.c
index f2630156aac..7be07f2af05 100644
--- a/sys/dev/pv/xen.c
+++ b/sys/dev/pv/xen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xen.c,v 1.86 2017/07/17 16:04:31 mikeb Exp $ */
+/* $OpenBSD: xen.c,v 1.87 2017/07/17 16:32:26 mikeb Exp $ */
/*
* Copyright (c) 2015, 2016, 2017 Mike Belopuhov
@@ -1178,6 +1178,11 @@ xen_grant_table_enter(struct xen_softc *sc, grant_ref_t ref, paddr_t pa,
}
#endif
ref -= ge->ge_start;
+ if (ge->ge_table[ref].flags != GTF_invalid) {
+ panic("reference %u is still in use, flags %#x frame %#x",
+ ref + ge->ge_start, ge->ge_table[ref].flags,
+ ge->ge_table[ref].frame);
+ }
ge->ge_table[ref].frame = atop(pa);
ge->ge_table[ref].domid = domain;
virtio_membar_sync();