summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2014-10-30 10:52:57 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-11-14 08:47:58 -0800
commit57ce0ed4fba064145d497dc901bee4f74cfc5c25 (patch)
treeba25a51f9367fb85f7455739c35aac4d4eb10236
parent209f5484ef126134f2d2f322246b0e4faf3c1fbd (diff)
downloadlinux-3.10-57ce0ed4fba064145d497dc901bee4f74cfc5c25.tar.gz
linux-3.10-57ce0ed4fba064145d497dc901bee4f74cfc5c25.tar.bz2
linux-3.10-57ce0ed4fba064145d497dc901bee4f74cfc5c25.zip
ext4: fix overflow when updating superblock backups after resize
commit 9378c6768e4fca48971e7b6a9075bc006eda981d upstream. When there are no meta block groups update_backups() will compute the backup block in 32-bit arithmetics thus possibly overflowing the block number and corrupting the filesystem. OTOH filesystems without meta block groups larger than 16 TB should be rare. Fix the problem by doing the counting in 64-bit arithmetics. Coverity-id: 741252 Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/ext4/resize.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
index c503850a61a..a69bd74ed39 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -1066,7 +1066,7 @@ static void update_backups(struct super_block *sb, int blk_off, char *data,
break;
if (meta_bg == 0)
- backup_block = group * bpg + blk_off;
+ backup_block = ((ext4_fsblk_t)group) * bpg + blk_off;
else
backup_block = (ext4_group_first_block_no(sb, group) +
ext4_bg_has_super(sb, group));