From b2d3cd62ca022151bc6aa5a099bea7a0694a6011 Mon Sep 17 00:00:00 2001 From: Mathieu Maret Date: Fri, 24 Apr 2020 23:28:11 +0200 Subject: [PATCH] alloc: fix free in full slab --- core/alloc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/alloc.c b/core/alloc.c index b61ffc3..c838bfb 100644 --- a/core/alloc.c +++ b/core/alloc.c @@ -192,7 +192,11 @@ int freeFromSlab(void *ptr, struct slabEntry *slab) if ((slabEntry->page <= (vaddr_t)ptr) && ((vaddr_t)ptr < (slabEntry->page + PAGE_SIZE))) { // pr_devel("free place! was %d is now %d\n", slabEntry->freeEl, ptr); - *((vaddr_t *)ptr) = (vaddr_t)slabEntry->freeEl; + if (slabEntry->full) { + *((vaddr_t *)ptr) = (vaddr_t)NULL; + } else { + *((vaddr_t *)ptr) = (vaddr_t)slabEntry->freeEl; + } slabEntry->freeEl = ptr; slabEntry->full = 0; return 1;