From: Christoph Lameter 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 --- mm/slub.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN mm/slub.c~slub-debug-fix-check-for-super-sized-slabs-512k-64bit-256k mm/slub.c --- a/mm/slub.c~slub-debug-fix-check-for-super-sized-slabs-512k-64bit-256k +++ a/mm/slub.c @@ -939,7 +939,7 @@ static void kmem_cache_open_debug_check( * 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); _