From: Christoph Lameter Date: Wed, 23 May 2007 20:57:56 +0000 (-0700) Subject: SLUB Debug: fix check for super sized slabs (>512k 64bit, >256k 32bit) X-Git-Tag: v2.6.22-rc3~49 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=33e9e24101abac2bf3535d0d013d6d27d19197cb;p=linux-2.6 SLUB Debug: fix check for super sized slabs (>512k 64bit, >256k 32bit) The check for super sized slabs where we can no longer move the free pointer behind the object for debugging purposes etc is accessing a field that is not setup yet. We must use objsize here since the size of the slab has not been determined yet. The effect of this is that a global slab shrink via "slabinfo -s" will show errors about offsets being wrong if booted with slub_debug. Potentially there are other troubles with huge slabs under slub_debug because the calculated free pointer offset is truncated. Signed-off-by: Christoph Lameter Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/slub.c b/mm/slub.c index 0b0c2a3e76..3e5aefcb40 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -939,7 +939,7 @@ static void kmem_cache_open_debug_check(struct kmem_cache *s) * Debugging or ctor may create a need to move the free * pointer. Fail if this happens. */ - if (s->size >= 65535 * sizeof(void *)) { + if (s->objsize >= 65535 * sizeof(void *)) { BUG_ON(s->flags & (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | SLAB_DESTROY_BY_RCU)); BUG_ON(s->ctor);