summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorXiaotian Feng <dfeng@redhat.com>2009-07-22 11:28:53 +0800
committerPekka Enberg <penberg@cs.helsinki.fi>2009-09-03 21:11:41 +0300
commit5788d8ad6c113c589eeaaa48a173adbbe6b1cb3d (patch)
treed205f122f24be0853747be9c4d71049ed4e6d49f /mm
parentacdfcd04d9df7d084ff752f82afad6ed4ad5f363 (diff)
downloadlwn-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.c5
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 */