aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/speakup/kobjects.c
diff options
context:
space:
mode:
authorVasiliy Kulikov <segooon@gmail.com>2010-10-17 18:51:53 +0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-10-19 10:10:13 -0700
commit6a56486716d54d2c16c46cde6a5cf10062cd6719 (patch)
tree911bb37e73068fbf0428deef842493ab576035e7 /drivers/staging/speakup/kobjects.c
parent1a88a068710910aa9a303bc061f405b0768fef80 (diff)
downloadkernel_samsung_smdk4412-6a56486716d54d2c16c46cde6a5cf10062cd6719.zip
kernel_samsung_smdk4412-6a56486716d54d2c16c46cde6a5cf10062cd6719.tar.gz
kernel_samsung_smdk4412-6a56486716d54d2c16c46cde6a5cf10062cd6719.tar.bz2
staging: speakup: fix leaks of sysfs groups
speakup_kobj_init() and speakup_kobj_exit() didn't remove i18n_attr_group and main_attr_group sysfs groups. Signed-off-by: Vasiliy Kulikov <segooon@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/speakup/kobjects.c')
-rw-r--r--drivers/staging/speakup/kobjects.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/staging/speakup/kobjects.c b/drivers/staging/speakup/kobjects.c
index e12b0e7..cc79f9e 100644
--- a/drivers/staging/speakup/kobjects.c
+++ b/drivers/staging/speakup/kobjects.c
@@ -989,24 +989,34 @@ int speakup_kobj_init(void)
speakup_kobj = kobject_create_and_add("speakup", accessibility_kobj);
if (!speakup_kobj) {
- kobject_put(accessibility_kobj);
- return -ENOMEM;
+ retval = -ENOMEM;
+ goto err_acc;
}
/* Create the files associated with this kobject */
retval = sysfs_create_group(speakup_kobj, &main_attr_group);
if (retval)
- speakup_kobj_exit();
+ goto err_speakup;
retval = sysfs_create_group(speakup_kobj, &i18n_attr_group);
if (retval)
- speakup_kobj_exit();
+ goto err_group;
+
+ return 0;
+err_group:
+ sysfs_remove_group(speakup_kobj, &main_attr_group);
+err_speakup:
+ kobject_put(speakup_kobj);
+err_acc:
+ kobject_put(accessibility_kobj);
return retval;
}
void speakup_kobj_exit(void)
{
+ sysfs_remove_group(speakup_kobj, &i18n_attr_group);
+ sysfs_remove_group(speakup_kobj, &main_attr_group);
kobject_put(speakup_kobj);
kobject_put(accessibility_kobj);
}