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  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Zvu83J94z6ZgwOw5@li-bb2b2a4c-3307-11b2-a85c-8fa5c3a69313.ibm.com>
Date: Tue, 1 Oct 2024 14:41:56 +0530
From: Ojaswin Mujoo <ojaswin@...ux.ibm.com>
To: Jan Kara <jack@...e.cz>
Cc: Ted Tso <tytso@....edu>, linux-ext4@...r.kernel.org
Subject: Re: [PATCH] resize2fs: Check number of group descriptors only if
 meta_bg is disabled

On Wed, Sep 25, 2024 at 07:19:26PM +0200, Jan Kara wrote:
> When meta_bg feature is enabled, the total number of group descriptors
> is not really limiting the filesystem size. So there's no reason to
> check it in that case. This allows resize2fs to resize filesystems past
> 256TB boundary similarly as the kernel can do it.
> 
> Signed-off-by: Jan Kara <jack@...e.cz>

Hi Jan,

Right this makes sense, I tested this using a sparse device:

# create a 1PB sparse device
sudo dmsetup create $SPARSE_DEVICE --table "0 $SIZE_1PB zero"
sudo dmsetup create $SNAPSHOT_NAME --table "0 $SIZE_1PB snapshot /dev/mapper/$SPARSE_DEVICE $BASE_DEVICE P 8"

sudo mkfs.ext4 /dev/mapper/$SNAPSHOT_NAME 512T
sudo resize2fs /dev/mapper/$SNAPSHOT_NAME 513T

This fails originally and works correctly with this patch applied. Infact without
this patch we end up failing 512T -> 512T resize as well which should just be 
a no-op.

Feel free to add:

Reviewed-by: Ojaswin Mujoo <ojaswin@...ux.ibm.com>

> ---
>  resize/main.c | 29 ++++++++++++++++-------------
>  1 file changed, 16 insertions(+), 13 deletions(-)
> 
> diff --git a/resize/main.c b/resize/main.c
> index f914c0507e97..08a4bbaf7c65 100644
> --- a/resize/main.c
> +++ b/resize/main.c
> @@ -270,8 +270,6 @@ int main (int argc, char ** argv)
>  	long		sysval;
>  	int		len, mount_flags;
>  	char		*mtpt, *undo_file = NULL;
> -	dgrp_t		new_group_desc_count;
> -	unsigned long	new_desc_blocks;
>  
>  #ifdef ENABLE_NLS
>  	setlocale(LC_MESSAGES, "");
> @@ -551,17 +549,22 @@ int main (int argc, char ** argv)
>  		new_size &= ~((blk64_t)(1ULL << fs->cluster_ratio_bits) - 1);
>  	}
>  
> -	new_group_desc_count = ext2fs_div64_ceil(new_size -
> -				fs->super->s_first_data_block,
> -						 EXT2_BLOCKS_PER_GROUP(fs->super));
> -	new_desc_blocks = ext2fs_div_ceil(new_group_desc_count,
> -					  EXT2_DESC_PER_BLOCK(fs->super));
> -	if ((new_desc_blocks + fs->super->s_first_data_block) >
> -	    EXT2_BLOCKS_PER_GROUP(fs->super)) {
> -		com_err(program_name, 0,
> -			_("New size results in too many block group "
> -			  "descriptors.\n"));
> -		goto errout;
> +	if (!ext2fs_has_feature_meta_bg(fs->super)) {
> +		dgrp_t		new_group_desc_count;
> +		unsigned long	new_desc_blocks;
> +
> +		new_group_desc_count = ext2fs_div64_ceil(new_size -
> +					fs->super->s_first_data_block,
> +					EXT2_BLOCKS_PER_GROUP(fs->super));
> +		new_desc_blocks = ext2fs_div_ceil(new_group_desc_count,
> +					EXT2_DESC_PER_BLOCK(fs->super));
> +		if ((new_desc_blocks + fs->super->s_first_data_block) >
> +		    EXT2_BLOCKS_PER_GROUP(fs->super)) {
> +			com_err(program_name, 0,
> +				_("New size results in too many block group "
> +				  "descriptors.\n"));
> +			goto errout;
> +		}
>  	}
>  
>  	if (!force && new_size < min_size) {
> -- 
> 2.35.3
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ