diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 4e301b0cdfb5..070660cb5b91 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -870,12 +870,15 @@ static void dx_release(struct dx_frame *frames) { struct dx_root_info *info; int i; + unsigned int indirect_levels; if (frames[0].bh == NULL) return; info = &((struct dx_root *)frames[0].bh->b_data)->info; - for (i = 0; i <= info->indirect_levels; i++) { + /* save local copy, "info" may be freed after brelse() */ + indirect_levels = info->indirect_levels; + for (i = 0; i <= indirect_levels; i++) { if (frames[i].bh == NULL) break; brelse(frames[i].bh);