Skip to content

Commit 9126d27

Browse files
andypriceAndreas Gruenbacher
authored andcommitted
gfs2: Don't clear sb->s_fs_info in gfs2_sys_fs_add
When gfs2_sys_fs_add() fails, it sets sb->s_fs_info to NULL on its error path (see commit 0d51521 ("GFS2: Add kobject release method")). The intention seems to be to prevent dereferencing sb->s_fs_info once the object pointed to has been deallocated, but that would be better achieved by setting the pointer to NULL in free_sbd(). As a consequence, when the call to gfs2_sys_fs_add() fails in gfs2_fill_super(), sdp = GFS2_SB(inode) will evaluate to NULL in iput() -> gfs2_drop_inode(), and accessing sdp->sd_flags will be a NULL pointer dereference. Fix that by only setting sb->s_fs_info to NULL when actually freeing the object pointed to in free_sbd(). Fixes: ae9f3bd ("gfs2: replace sd_aspace with sd_inode") Reported-by: [email protected] Signed-off-by: Andrew Price <[email protected]> Signed-off-by: Andreas Gruenbacher <[email protected]>
1 parent 914873b commit 9126d27

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

fs/gfs2/ops_fstype.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ static void gfs2_tune_init(struct gfs2_tune *gt)
6464

6565
void free_sbd(struct gfs2_sbd *sdp)
6666
{
67+
struct super_block *sb = sdp->sd_vfs;
68+
6769
free_percpu(sdp->sd_lkstats);
70+
sb->s_fs_info = NULL;
6871
kfree(sdp);
6972
}
7073

@@ -1314,7 +1317,6 @@ static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc)
13141317
iput(sdp->sd_inode);
13151318
fail_free:
13161319
free_sbd(sdp);
1317-
sb->s_fs_info = NULL;
13181320
return error;
13191321
}
13201322

fs/gfs2/sys.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,6 @@ int gfs2_sys_fs_add(struct gfs2_sbd *sdp)
764764
fs_err(sdp, "error %d adding sysfs files\n", error);
765765
kobject_put(&sdp->sd_kobj);
766766
wait_for_completion(&sdp->sd_kobj_unregister);
767-
sb->s_fs_info = NULL;
768767
return error;
769768
}
770769

0 commit comments

Comments
 (0)