Skip to content

Commit

Permalink
ext4: release kobject/kset even when init/register fail
Browse files Browse the repository at this point in the history
Even when kobject_init_and_add/kset_register fail, the kobject has been
already initialized and the refcount set to 1. Thus it is necessary to
release the kobject/kset, to avoid the memory associated with it hanging
around forever.

Signed-off-by: Riccardo Schirone <sirmy15@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
  • Loading branch information
Riccardo Schirone authored and Theodore Ts'o committed Jan 11, 2018
1 parent a794df0 commit 95c4df0
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions fs/ext4/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -396,8 +396,11 @@ int ext4_register_sysfs(struct super_block *sb)
init_completion(&sbi->s_kobj_unregister);
err = kobject_init_and_add(&sbi->s_kobj, &ext4_sb_ktype, NULL,
"%s", sb->s_id);
if (err)
if (err) {
kobject_put(&sbi->s_kobj);
wait_for_completion(&sbi->s_kobj_unregister);
return err;
}

if (ext4_proc_root)
sbi->s_proc = proc_mkdir(sb->s_id, ext4_proc_root);
Expand Down Expand Up @@ -430,15 +433,19 @@ int __init ext4_init_sysfs(void)
kobject_set_name(&ext4_kset.kobj, "ext4");
ext4_kset.kobj.parent = fs_kobj;
ret = kset_register(&ext4_kset);
if (ret)
if (ret) {
kset_unregister(&ext4_kset);
return ret;
}

ret = kobject_init_and_add(&ext4_feat, &ext4_feat_ktype,
NULL, "features");
if (ret)
if (ret) {
kobject_put(&ext4_feat);
kset_unregister(&ext4_kset);
else
} else {
ext4_proc_root = proc_mkdir(proc_dirname, NULL);
}
return ret;
}

Expand Down

0 comments on commit 95c4df0

Please sign in to comment.