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: Wed, 16 Nov 2022 12:56:18 +0100 From: Jan Kara <jack@...e.cz> To: Baokun Li <libaokun1@...wei.com> Cc: linux-ext4@...r.kernel.org, tytso@....edu, adilger.kernel@...ger.ca, jack@...e.cz, ritesh.list@...il.com, linux-kernel@...r.kernel.org, yi.zhang@...wei.com, yukuai3@...wei.com Subject: Re: [PATCH v2 3/3] ext4: fix corruption when online resizing a 1K bigalloc fs On Wed 16-11-22 15:28:02, Baokun Li wrote: > When a backup superblock is updated in update_backups(), the primary > superblock's offset in the group (that is, sbi->s_sbh->b_blocknr) is used > as the backup superblock's offset in its group. However, when the block > size is 1K and bigalloc is enabled, the two offsets are not equal. This > causes the backup group descriptors to be overwritten by the superblock > in update_backups(). Moreover, if meta_bg is enabled, the file system will > be corrupted because this feature uses backup group descriptors. > > To solve this issue, we use a more accurate ext4_group_first_block_no() as > the offset of the backup superblock in its group. > > Fixes: d77147ff443b ("ext4: add support for online resizing with bigalloc") > Signed-off-by: Baokun Li <libaokun1@...wei.com> The patch looks good to me. Feel free to add: Reviewed-by: Jan Kara <jack@...e.cz> Honza > --- > V1->V2: > Replace s_first_data_block with ext4_group_first_block_no() to avoid > type warning.(Reported-by: kernel test robot <lkp@...el.com>) > > fs/ext4/resize.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c > index 32fbfc173571..98e544c2f97d 100644 > --- a/fs/ext4/resize.c > +++ b/fs/ext4/resize.c > @@ -1591,8 +1591,8 @@ static int ext4_flex_group_add(struct super_block *sb, > int meta_bg = ext4_has_feature_meta_bg(sb); > sector_t old_gdb = 0; > > - update_backups(sb, sbi->s_sbh->b_blocknr, (char *)es, > - sizeof(struct ext4_super_block), 0); > + update_backups(sb, ext4_group_first_block_no(sb, 0), > + (char *)es, sizeof(struct ext4_super_block), 0); > for (; gdb_num <= gdb_num_end; gdb_num++) { > struct buffer_head *gdb_bh; > > @@ -1803,7 +1803,7 @@ static int ext4_group_extend_no_check(struct super_block *sb, > if (test_opt(sb, DEBUG)) > printk(KERN_DEBUG "EXT4-fs: extended group to %llu " > "blocks\n", ext4_blocks_count(es)); > - update_backups(sb, EXT4_SB(sb)->s_sbh->b_blocknr, > + update_backups(sb, ext4_group_first_block_no(sb, 0), > (char *)es, sizeof(struct ext4_super_block), 0); > } > return err; > -- > 2.31.1 > -- Jan Kara <jack@...e.com> SUSE Labs, CR
Powered by blists - more mailing lists