aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2014-10-30 10:52:57 -0400
committerBen Hutchings <ben@decadent.org.uk>2014-12-14 16:23:53 +0000
commit2bd34f24f5db5997268f779c42a8dca20514a6f7 (patch)
treefb004b953690caad22aeaf74e42ddc1dafa7c587 /fs/ext4
parent4dedbafc479dd5b5454f1be6468d4fc1a6c5c269 (diff)
downloadkernel_samsung_smdk4412-2bd34f24f5db5997268f779c42a8dca20514a6f7.zip
kernel_samsung_smdk4412-2bd34f24f5db5997268f779c42a8dca20514a6f7.tar.gz
kernel_samsung_smdk4412-2bd34f24f5db5997268f779c42a8dca20514a6f7.tar.bz2
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> [bwh: Backported to 3.2: adjust context] Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'fs/ext4')
-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 6e67b97..9e9e67b 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -692,7 +692,7 @@ static void update_backups(struct super_block *sb,
(err = ext4_journal_restart(handle, EXT4_MAX_TRANS_DATA)))
break;
- bh = sb_getblk(sb, group * bpg + blk_off);
+ bh = sb_getblk(sb, (ext4_fsblk_t)group * bpg + blk_off);
if (!bh) {
err = -ENOMEM;
break;