gfs2: Fix error path kobject memory leak
If a call to kobject_init_and_add() fails we must call kobject_put() otherwise we leak memory. Function gfs2_sys_fs_add always calls kobject_init_and_add() which always calls kobject_init(). It is safe to leave object destruction up to the kobject release function and never free it manually. Remove call to kfree() and always call kobject_put() in the error path. Signed-off-by: Tobin C. Harding <tobin@kernel.org> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3aff5fac54
commit
fbcde197e1
|
@ -650,7 +650,6 @@ int gfs2_sys_fs_add(struct gfs2_sbd *sdp)
|
|||
char ro[20];
|
||||
char spectator[20];
|
||||
char *envp[] = { ro, spectator, NULL };
|
||||
int sysfs_frees_sdp = 0;
|
||||
|
||||
sprintf(ro, "RDONLY=%d", sb_rdonly(sb));
|
||||
sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0);
|
||||
|
@ -661,8 +660,6 @@ int gfs2_sys_fs_add(struct gfs2_sbd *sdp)
|
|||
if (error)
|
||||
goto fail_reg;
|
||||
|
||||
sysfs_frees_sdp = 1; /* Freeing sdp is now done by sysfs calling
|
||||
function gfs2_sbd_release. */
|
||||
error = sysfs_create_group(&sdp->sd_kobj, &tune_group);
|
||||
if (error)
|
||||
goto fail_reg;
|
||||
|
@ -687,10 +684,7 @@ fail_tune:
|
|||
fail_reg:
|
||||
free_percpu(sdp->sd_lkstats);
|
||||
fs_err(sdp, "error %d adding sysfs files\n", error);
|
||||
if (sysfs_frees_sdp)
|
||||
kobject_put(&sdp->sd_kobj);
|
||||
else
|
||||
kfree(sdp);
|
||||
kobject_put(&sdp->sd_kobj);
|
||||
sb->s_fs_info = NULL;
|
||||
return error;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue