From 8426cf589a4bbb80184ab131542260c5321ca6b9 Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Fri, 7 Jul 2017 07:47:29 +0900 Subject: [PATCH] ihk_pagealloc_free(): report double-free in bitmap based allocator --- lib/page_alloc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/page_alloc.c b/lib/page_alloc.c index 5ccda66b..86d1a069 100644 --- a/lib/page_alloc.c +++ b/lib/page_alloc.c @@ -228,7 +228,14 @@ void ihk_pagealloc_free(void *__desc, unsigned long address, int npages) mcs_lock_lock(&desc->lock, &node); mi = (address - desc->start) >> desc->shift; for (i = 0; i < npages; i++, mi++) { - desc->map[MAP_INDEX(mi)] &= ~(1UL << MAP_BIT(mi)); + if (!(desc->map[MAP_INDEX(mi)] & (1UL << MAP_BIT(mi)))) { + kprintf("%s: double-freeing page 0x%lx\n", + __FUNCTION__, address + i * PAGE_SIZE); + panic("panic"); + } + else { + desc->map[MAP_INDEX(mi)] &= ~(1UL << MAP_BIT(mi)); + } } mcs_lock_unlock(&desc->lock, &node); }