diff options
author | Christoph Lameter <clameter@sgi.com> | 2007-05-23 13:57:56 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-23 20:14:13 -0700 |
commit | 33e9e24101abac2bf3535d0d013d6d27d19197cb (patch) | |
tree | 04d4e3952331b66fef36efa0dc0612cd4f6385c9 /mm/slub.c | |
parent | 418508c13222ddba475873ea95c8aeadd26104f2 (diff) | |
download | linux-33e9e24101abac2bf3535d0d013d6d27d19197cb.tar.gz linux-33e9e24101abac2bf3535d0d013d6d27d19197cb.tar.bz2 linux-33e9e24101abac2bf3535d0d013d6d27d19197cb.zip |
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 <clameter@sgi.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/slub.c b/mm/slub.c index 0b0c2a3e76f7..3e5aefcb4075 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); |