| From 9378c6768e4fca48971e7b6a9075bc006eda981d Mon Sep 17 00:00:00 2001 |
| From: Jan Kara <jack@suse.cz> |
| Date: Thu, 30 Oct 2014 10:52:57 -0400 |
| Subject: ext4: fix overflow when updating superblock backups after resize |
| |
| From: Jan Kara <jack@suse.cz> |
| |
| 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> |
| |
| --- |
| fs/ext4/resize.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/ext4/resize.c |
| +++ b/fs/ext4/resize.c |
| @@ -1081,7 +1081,7 @@ static void update_backups(struct super_ |
| 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)); |