diff options
author | Vasiliy Kulikov <segooon@gmail.com> | 2010-10-17 18:51:53 +0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-10-19 10:10:13 -0700 |
commit | 6a56486716d54d2c16c46cde6a5cf10062cd6719 (patch) | |
tree | 911bb37e73068fbf0428deef842493ab576035e7 /drivers/staging/speakup | |
parent | 1a88a068710910aa9a303bc061f405b0768fef80 (diff) |
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')
-rw-r--r-- | drivers/staging/speakup/kobjects.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/staging/speakup/kobjects.c b/drivers/staging/speakup/kobjects.c index e12b0e7c0ad6..cc79f9edfe9e 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); } |