GFS2: Fix use-after-free bug on umount (try #2)

This should solve the issue with the previous attempt at fixing this.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>

+12 -9
+12 -8
fs/gfs2/ops_fstype.c
··· 1263 1263 static void gfs2_kill_sb(struct super_block *sb) 1264 1264 { 1265 1265 struct gfs2_sbd *sdp = sb->s_fs_info; 1266 - if (sdp) { 1267 - gfs2_meta_syncfs(sdp); 1268 - dput(sdp->sd_root_dir); 1269 - dput(sdp->sd_master_dir); 1270 - sdp->sd_root_dir = NULL; 1271 - sdp->sd_master_dir = NULL; 1266 + 1267 + if (sdp == NULL) { 1268 + kill_block_super(sb); 1269 + return; 1272 1270 } 1271 + 1272 + gfs2_meta_syncfs(sdp); 1273 + dput(sdp->sd_root_dir); 1274 + dput(sdp->sd_master_dir); 1275 + sdp->sd_root_dir = NULL; 1276 + sdp->sd_master_dir = NULL; 1273 1277 shrink_dcache_sb(sb); 1274 1278 kill_block_super(sb); 1275 - if (sdp) 1276 - gfs2_delete_debugfs_file(sdp); 1279 + gfs2_delete_debugfs_file(sdp); 1280 + kfree(sdp); 1277 1281 } 1278 1282 1279 1283 struct file_system_type gfs2_fs_type = {
-1
fs/gfs2/ops_super.c
··· 182 182 183 183 /* At this point, we're through participating in the lockspace */ 184 184 gfs2_sys_fs_del(sdp); 185 - kfree(sdp); 186 185 } 187 186 188 187 /**