efivars: handle errors from register_efivars()
authorDan Carpenter <error27@gmail.com>
Fri, 18 Mar 2011 07:12:38 +0000 (10:12 +0300)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 19 Apr 2011 23:45:50 +0000 (16:45 -0700)
We should unwind and return an error if register_efivars() fails.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Acked-by: Mike Waychison <mikew@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/firmware/efivars.c

index ff2fe40952281bcda6381cba7136ac255525d003..5d1ec6898e7cf98344ddfa9c9e9ddc1f8658cdb7 100644 (file)
@@ -803,6 +803,8 @@ efivars_init(void)
        ops.set_variable = efi.set_variable;
        ops.get_next_variable = efi.get_next_variable;
        error = register_efivars(&__efivars, &ops, efi_kobj);
+       if (error)
+               goto err_put;
 
        /* Don't forget the systab entry */
        error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
@@ -810,10 +812,15 @@ efivars_init(void)
                printk(KERN_ERR
                       "efivars: Sysfs attribute export failed with error %d.\n",
                       error);
-               unregister_efivars(&__efivars);
-               kobject_put(efi_kobj);
+               goto err_unregister;
        }
 
+       return 0;
+
+err_unregister:
+       unregister_efivars(&__efivars);
+err_put:
+       kobject_put(efi_kobj);
        return error;
 }