diff options
author | 2017-07-17 16:32:26 +0000 | |
---|---|---|
committer | 2017-07-17 16:32:26 +0000 | |
commit | 6a831e9aa3d1f76955fe95cfed45d6e67c12c135 (patch) | |
tree | 62b97f5d9ee18c61d99b3254b95698ba5da899f8 | |
parent | Nuke findproto() and get_ifa(). They are unused now that (diff) | |
download | wireguard-openbsd-6a831e9aa3d1f76955fe95cfed45d6e67c12c135.tar.xz wireguard-openbsd-6a831e9aa3d1f76955fe95cfed45d6e67c12c135.zip |
Forbid overwriting a grant table entry currently in use
-rw-r--r-- | sys/dev/pv/xen.c | 7 |
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(); |