diff options
author | Jan Kara <jack@suse.cz> | 2020-07-28 15:04:36 +0200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2020-08-07 20:12:36 +0200 |
commit | e7bfb5c9bb3d63cb2abb3ceaf1a429d9f02f942d (patch) | |
tree | 18846b883f97a443daf02ea7687ab91ffb525b98 /fs/ext4 | |
parent | ext4: fold ext4_data_block_valid_rcu() into the caller (diff) | |
download | linux-e7bfb5c9bb3d63cb2abb3ceaf1a429d9f02f942d.tar.xz linux-e7bfb5c9bb3d63cb2abb3ceaf1a429d9f02f942d.zip |
ext4: handle add_system_zone() failure in ext4_setup_system_zone()
There's one place that fails to handle error from add_system_zone() call
and thus we can fail to protect superblock and group-descriptor blocks
properly in case of ENOMEM. Fix it.
Reported-by: Lukas Czerner <lczerner@redhat.com>
Reviewed-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20200728130437.7804-6-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/block_validity.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c index 9c40214f31f9..2d008c1b58f2 100644 --- a/fs/ext4/block_validity.c +++ b/fs/ext4/block_validity.c @@ -235,10 +235,13 @@ int ext4_setup_system_zone(struct super_block *sb) for (i=0; i < ngroups; i++) { cond_resched(); if (ext4_bg_has_super(sb, i) && - ((i < 5) || ((i % flex_size) == 0))) - add_system_zone(system_blks, + ((i < 5) || ((i % flex_size) == 0))) { + ret = add_system_zone(system_blks, ext4_group_first_block_no(sb, i), ext4_bg_num_gdb(sb, i) + 1, 0); + if (ret) + goto err; + } gdp = ext4_get_group_desc(sb, i, NULL); ret = add_system_zone(system_blks, ext4_block_bitmap(sb, gdp), 1, 0); |