lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 14 Sep 2021 15:11:02 -0400 From: "Theodore Ts'o" <tytso@....edu> To: Ext4 Developers List <linux-ext4@...r.kernel.org> Cc: "Theodore Ts'o" <tytso@....edu> Subject: [PATCH 1/3] resize2fs: attempt to keep the # of inodes valid by removing the last bg If a the 10GB file system (with the default inode ratio size of 16k) is resized to 64TB, the number of inodes will become 2**32 --- one above the maximum allowed number of inodes of 2**32-1. In adjust_fs_info(), we already try drop the last block group if there isn't sufficient space in the last block group to support the metadata for that block group. So if dropping the last block group allows the number of inodes to valid, we should try that as well. In some cases this will mean resizing a file system to 64TB will result in it be resized to a size of 64TB - 128MB, which is close enough for government work. Addresses-Google-Bug: 199105099 Signed-off-by: Theodore Ts'o <tytso@....edu> --- resize/resize2fs.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/resize/resize2fs.c b/resize/resize2fs.c index daaa3d49..770d2d06 100644 --- a/resize/resize2fs.c +++ b/resize/resize2fs.c @@ -757,6 +757,15 @@ retry: */ new_inodes =(unsigned long long) fs->super->s_inodes_per_group * fs->group_desc_count; if (new_inodes > ~0U) { + new_inodes = (unsigned long long) fs->super->s_inodes_per_group * (fs->group_desc_count - 1); + if (new_inodes <= ~0U) { + unsigned long long new_blocks = + ((unsigned long long) fs->super->s_blocks_per_group * + (fs->group_desc_count - 1)) + fs->super->s_first_data_block; + + ext2fs_blocks_count_set(fs->super, new_blocks); + goto retry; + } fprintf(stderr, _("inodes (%llu) must be less than %u\n"), (unsigned long long) new_inodes, ~0U); return EXT2_ET_TOO_MANY_INODES; -- 2.31.0
Powered by blists - more mailing lists