| From: Jan Kara <jack@suse.cz> |
| Date: Fri, 25 May 2018 12:51:25 -0400 |
| Subject: ext4: fix fencepost error in check for inode count overflow during |
| resize |
| |
| commit 4f2f76f751433908364ccff82f437a57d0e6e9b7 upstream. |
| |
| ext4_resize_fs() has an off-by-one bug when checking whether growing of |
| a filesystem will not overflow inode count. As a result it allows a |
| filesystem with 8192 inodes per group to grow to 64TB which overflows |
| inode count to 0 and makes filesystem unusable. Fix it. |
| |
| Fixes: 3f8a6411fbada1fa482276591e037f3b1adcf55b |
| Reported-by: Jaco Kroon <jaco@uls.co.za> |
| Signed-off-by: Jan Kara <jack@suse.cz> |
| Signed-off-by: Theodore Ts'o <tytso@mit.edu> |
| Reviewed-by: Andreas Dilger <adilger@dilger.ca> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| fs/ext4/resize.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/fs/ext4/resize.c |
| +++ b/fs/ext4/resize.c |
| @@ -1906,7 +1906,7 @@ retry: |
| return 0; |
| |
| n_group = ext4_get_group_number(sb, n_blocks_count - 1); |
| - if (n_group > (0xFFFFFFFFUL / EXT4_INODES_PER_GROUP(sb))) { |
| + if (n_group >= (0xFFFFFFFFUL / EXT4_INODES_PER_GROUP(sb))) { |
| ext4_warning(sb, "resize would cause inodes_count overflow"); |
| return -EINVAL; |
| } |