summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authormdf <mdf@FreeBSD.org>2010-08-31 17:43:47 +0000
committermdf <mdf@FreeBSD.org>2010-08-31 17:43:47 +0000
commit9690cad4e39c8559605213c37833bd2dd2d2a77a (patch)
tree299a9b4f91d1fa6001be1cc067d2188c63c3957e /sys/vm
parent8902e95517f765c3c460a9eeb28aa143253efd9e (diff)
downloadFreeBSD-src-9690cad4e39c8559605213c37833bd2dd2d2a77a.zip
FreeBSD-src-9690cad4e39c8559605213c37833bd2dd2d2a77a.tar.gz
Have memguard(9) crash with an easier-to-debug message on double-free.
Reviewed by: zml MFC after: 3 weeks
Diffstat (limited to 'sys/vm')
-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 85893ab..3cf935c 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);
OpenPOWER on IntegriCloud