]>
Commit | Line | Data |
---|---|---|
39f3dcdc SLM |
1 | From 86dbdea2e28d356cdf917c477da5724d17427fdd Mon Sep 17 00:00:00 2001 |
2 | From: Lukas Czerner <lczerner@redhat.com> | |
3 | Date: Fri, 15 Mar 2019 00:15:32 -0400 | |
4 | Subject: ext4: add missing brelse() in add_new_gdb_meta_bg() | |
5 | ||
6 | [ Upstream commit d64264d6218e6892edd832dc3a5a5857c2856c53 ] | |
7 | ||
8 | Currently in add_new_gdb_meta_bg() there is a missing brelse of gdb_bh | |
9 | in case ext4_journal_get_write_access() fails. | |
10 | Additionally kvfree() is missing in the same error path. Fix it by | |
11 | moving the ext4_journal_get_write_access() before the ext4 sb update as | |
12 | Ted suggested and release n_group_desc and gdb_bh in case it fails. | |
13 | ||
14 | Fixes: 61a9c11e5e7a ("ext4: add missing brelse() add_new_gdb_meta_bg()'s error path") | |
15 | Signed-off-by: Lukas Czerner <lczerner@redhat.com> | |
16 | Signed-off-by: Theodore Ts'o <tytso@mit.edu> | |
17 | Signed-off-by: Sasha Levin <sashal@kernel.org> | |
18 | --- | |
19 | fs/ext4/resize.c | 11 +++++++++-- | |
20 | 1 file changed, 9 insertions(+), 2 deletions(-) | |
21 | ||
22 | diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c | |
23 | index 6f0acfe31418..fb9fbf993e22 100644 | |
24 | --- a/fs/ext4/resize.c | |
25 | +++ b/fs/ext4/resize.c | |
26 | @@ -907,11 +907,18 @@ static int add_new_gdb_meta_bg(struct super_block *sb, | |
27 | memcpy(n_group_desc, o_group_desc, | |
28 | EXT4_SB(sb)->s_gdb_count * sizeof(struct buffer_head *)); | |
29 | n_group_desc[gdb_num] = gdb_bh; | |
30 | + | |
31 | + BUFFER_TRACE(gdb_bh, "get_write_access"); | |
32 | + err = ext4_journal_get_write_access(handle, gdb_bh); | |
33 | + if (err) { | |
34 | + kvfree(n_group_desc); | |
35 | + brelse(gdb_bh); | |
36 | + return err; | |
37 | + } | |
38 | + | |
39 | EXT4_SB(sb)->s_group_desc = n_group_desc; | |
40 | EXT4_SB(sb)->s_gdb_count++; | |
41 | kvfree(o_group_desc); | |
42 | - BUFFER_TRACE(gdb_bh, "get_write_access"); | |
43 | - err = ext4_journal_get_write_access(handle, gdb_bh); | |
44 | return err; | |
45 | } | |
46 | ||
47 | -- | |
48 | 2.19.1 | |
49 |