Subject: + slub-fix-leak-of-name-in-sysfs_slab_add.patch added to -mm tree To: davej@xxxxxxxxxxxxxxxxx,penberg@xxxxxxxxxx,vdavydov@xxxxxxxxxxxxx From: akpm@xxxxxxxxxxxxxxxxxxxx Date: Fri, 07 Mar 2014 14:51:08 -0800 The patch titled Subject: slub: fix leak of 'name' in sysfs_slab_add has been added to the -mm tree. Its filename is slub-fix-leak-of-name-in-sysfs_slab_add.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/slub-fix-leak-of-name-in-sysfs_slab_add.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/slub-fix-leak-of-name-in-sysfs_slab_add.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Dave Jones <davej@xxxxxxxxxxxxxxxxx> Subject: slub: fix leak of 'name' in sysfs_slab_add The failure paths of sysfs_slab_add don't release the allocation of 'name' made by create_unique_id() a few lines above the context of the diff below. Create a common exit path to make it more obvious what needs freeing. [vdavydov@xxxxxxxxxxxxx: free the name only if !unmergeable] Signed-off-by: Dave Jones <davej@xxxxxxxxxxxxxxxxx> Signed-off-by: Vladimir Davydov <vdavydov@xxxxxxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/slub.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff -puN mm/slub.c~slub-fix-leak-of-name-in-sysfs_slab_add mm/slub.c --- a/mm/slub.c~slub-fix-leak-of-name-in-sysfs_slab_add +++ a/mm/slub.c @@ -5214,25 +5214,19 @@ static int sysfs_slab_add(struct kmem_ca s->kobj.kset = cache_kset(s); err = kobject_init_and_add(&s->kobj, &slab_ktype, NULL, "%s", name); - if (err) { - kobject_put(&s->kobj); - return err; - } + if (err) + goto out_put_kobj; err = sysfs_create_group(&s->kobj, &slab_attr_group); - if (err) { - kobject_del(&s->kobj); - kobject_put(&s->kobj); - return err; - } + if (err) + goto out_del_kobj; #ifdef CONFIG_MEMCG_KMEM if (is_root_cache(s)) { s->memcg_kset = kset_create_and_add("cgroup", NULL, &s->kobj); if (!s->memcg_kset) { - kobject_del(&s->kobj); - kobject_put(&s->kobj); - return -ENOMEM; + err = -ENOMEM; + goto out_del_kobj; } } #endif @@ -5241,9 +5235,16 @@ static int sysfs_slab_add(struct kmem_ca if (!unmergeable) { /* Setup first alias */ sysfs_slab_alias(s, s->name); - kfree(name); } - return 0; +out: + if (!unmergeable) + kfree(name); + return err; +out_del_kobj: + kobject_del(&s->kobj); +out_put_kobj: + kobject_put(&s->kobj); + goto out; } static void sysfs_slab_remove(struct kmem_cache *s) _ Patches currently in -mm which might be from davej@xxxxxxxxxxxxxxxxx are fault-injection-set-bounds-on-what-proc-self-make-it-fail-accepts.patch fault-injection-set-bounds-on-what-proc-self-make-it-fail-accepts-fix.patch linux-next.patch slub-fix-leak-of-name-in-sysfs_slab_add.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html