kobject: fix memory leak in kobject_set_name_vargs
authorMaurizio Lombardi <mlombard@redhat.com>
Fri, 8 Nov 2013 14:28:25 +0000 (15:28 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 9 Dec 2013 02:19:15 +0000 (18:19 -0800)
If the call to kvasprintf fails then the old name of the object will be leaked,
this patch fixes the bug by restoring the old name before returning ENOMEM.

Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
lib/kobject.c

index 98b45bb..94b321f 100644 (file)
@@ -265,8 +265,10 @@ int kobject_set_name_vargs(struct kobject *kobj, const char *fmt,
                return 0;
 
        kobj->name = kvasprintf(GFP_KERNEL, fmt, vargs);
-       if (!kobj->name)
+       if (!kobj->name) {
+               kobj->name = old_name;
                return -ENOMEM;
+       }
 
        /* ewww... some of these buggers have '/' in the name ... */
        while ((s = strchr(kobj->name, '/')))