aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasiliy Kulikov <segooon@gmail.com>2010-10-17 10:51:53 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-10-19 13:10:13 -0400
commit6a56486716d54d2c16c46cde6a5cf10062cd6719 (patch)
tree911bb37e73068fbf0428deef842493ab576035e7
parent1a88a068710910aa9a303bc061f405b0768fef80 (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>
-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 e12b0e7c0ad6..cc79f9edfe9e 100644
--- a/drivers/staging/speakup/kobjects.c
+++ b/drivers/staging/speakup/kobjects.c
@@ -989,24 +989,34 @@ int speakup_kobj_init(void)
989 989
990 speakup_kobj = kobject_create_and_add("speakup", accessibility_kobj); 990 speakup_kobj = kobject_create_and_add("speakup", accessibility_kobj);
991 if (!speakup_kobj) { 991 if (!speakup_kobj) {
992 kobject_put(accessibility_kobj); 992 retval = -ENOMEM;
993 return -ENOMEM; 993 goto err_acc;
994 } 994 }
995 995
996 /* Create the files associated with this kobject */ 996 /* Create the files associated with this kobject */
997 retval = sysfs_create_group(speakup_kobj, &main_attr_group); 997 retval = sysfs_create_group(speakup_kobj, &main_attr_group);
998 if (retval) 998 if (retval)
999 speakup_kobj_exit(); 999 goto err_speakup;
1000 1000
1001 retval = sysfs_create_group(speakup_kobj, &i18n_attr_group); 1001 retval = sysfs_create_group(speakup_kobj, &i18n_attr_group);
1002 if (retval) 1002 if (retval)
1003 speakup_kobj_exit(); 1003 goto err_group;
1004
1005 return 0;
1004 1006
1007err_group:
1008 sysfs_remove_group(speakup_kobj, &main_attr_group);
1009err_speakup:
1010 kobject_put(speakup_kobj);
1011err_acc:
1012 kobject_put(accessibility_kobj);
1005 return retval; 1013 return retval;
1006} 1014}
1007 1015
1008void speakup_kobj_exit(void) 1016void speakup_kobj_exit(void)
1009{ 1017{
1018 sysfs_remove_group(speakup_kobj, &i18n_attr_group);
1019 sysfs_remove_group(speakup_kobj, &main_attr_group);
1010 kobject_put(speakup_kobj); 1020 kobject_put(speakup_kobj);
1011 kobject_put(accessibility_kobj); 1021 kobject_put(accessibility_kobj);
1012} 1022}