diff options
author | Xiaotian Feng <dfeng@redhat.com> | 2009-07-22 11:28:53 +0800 |
---|---|---|
committer | Pekka Enberg <penberg@cs.helsinki.fi> | 2009-09-03 21:11:41 +0300 |
commit | 5788d8ad6c113c589eeaaa48a173adbbe6b1cb3d (patch) | |
tree | d205f122f24be0853747be9c4d71049ed4e6d49f /mm | |
parent | acdfcd04d9df7d084ff752f82afad6ed4ad5f363 (diff) | |
download | lwn-5788d8ad6c113c589eeaaa48a173adbbe6b1cb3d.tar.gz lwn-5788d8ad6c113c589eeaaa48a173adbbe6b1cb3d.zip |
slub: release kobject if sysfs_create_group failed in sysfs_slab_add
When CONFIG_SLUB_DEBUG is enabled, sysfs_slab_add should unlink and put the
kobject if sysfs_create_group failed. Otherwise, sysfs_slab_add returns error
then free kmem_cache s, thus memory of s->kobj is leaked.
Acked-by: Christoph Lameter <cl@linux-foundation.org>
Signed-off-by: Xiaotian Feng <dfeng@redhat.com>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slub.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/mm/slub.c b/mm/slub.c index be493bd63c31..d73f771d278f 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -4593,8 +4593,11 @@ static int sysfs_slab_add(struct kmem_cache *s) } err = sysfs_create_group(&s->kobj, &slab_attr_group); - if (err) + if (err) { + kobject_del(&s->kobj); + kobject_put(&s->kobj); return err; + } kobject_uevent(&s->kobj, KOBJ_ADD); if (!unmergeable) { /* Setup first alias */ |