From 24091f6e3f56139faba5f9177297845402dfd4b1 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 7 May 2023 21:23:22 -0300 Subject: [PATCH] slab: fix large slab deallocation --- kernel-src/mm/slab.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel-src/mm/slab.c b/kernel-src/mm/slab.c index aed42b22..64faf0ed 100644 --- a/kernel-src/mm/slab.c +++ b/kernel-src/mm/slab.c @@ -95,8 +95,8 @@ static slab_t *returnobject(scache_t *cache, void *obj) { freeptr = (void **)((uintptr_t)obj + cache->size); __assert(*freeptr == NULL); } else { - slab = cache->full; - bool partial = false; + bool partial = cache->full == NULL; + slab = partial ? cache->partial : cache->full; while (slab) { void *top = (void *)((uintptr_t)slab->base + cache->slabobjcount * cache->truesize); if (obj >= slab->base && obj < top)