aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/memguard.c
diff options
context:
space:
mode:
authorMatthew D Fleming <mdf@FreeBSD.org>2010-08-31 17:43:47 +0000
committerMatthew D Fleming <mdf@FreeBSD.org>2010-08-31 17:43:47 +0000
commita2a200a24d6137b42a72f41c8815e6c58f098d02 (patch)
tree299a9b4f91d1fa6001be1cc067d2188c63c3957e /sys/vm/memguard.c
parent52e2247273baf52aa772948a9a0ea28690e2da2d (diff)
Notes
Diffstat (limited to 'sys/vm/memguard.c')
-rw-r--r--sys/vm/memguard.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/vm/memguard.c b/sys/vm/memguard.c
index 85893ab38071..3cf935c27ebb 100644
--- a/sys/vm/memguard.c
+++ b/sys/vm/memguard.c
@@ -247,9 +247,13 @@ SYSINIT(memguard, SI_SUB_KLD, SI_ORDER_ANY, memguard_sysinit, NULL);
static u_long *
v2sizep(vm_offset_t va)
{
+ vm_paddr_t pa;
struct vm_page *p;
- p = PHYS_TO_VM_PAGE(pmap_kextract(va));
+ pa = pmap_kextract(va);
+ if (pa == 0)
+ panic("MemGuard detected double-free of %p", (void *)va);
+ p = PHYS_TO_VM_PAGE(pa);
KASSERT(p->wire_count != 0 && p->queue == PQ_NONE,
("MEMGUARD: Expected wired page %p in vtomgfifo!", p));
return ((u_long *)&p->pageq.tqe_next);