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
| ||
|
Date: Fri, 4 Nov 2022 08:58:16 -0700 From: "Darrick J. Wong" <djwong@...nel.org> 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] ext4: fix bad checksum after online resize On Fri, Nov 04, 2022 at 04:35:53PM +0800, Baokun Li wrote: > When online resizing is performed twice consecutively, the error message > "Superblock checksum does not match superblock" is displayed for the > second time. Here's the reproducer: > > mkfs.ext4 -F /dev/sdb 100M > mount /dev/sdb /tmp/test > resize2fs /dev/sdb 5G > resize2fs /dev/sdb 6G > > To solve this issue, we moved the update of the checksum after the > es->s_overhead_clusters is updated. > > Fixes: 026d0d27c488 ("ext4: reduce computation of overhead during resize") > Fixes: de394a86658f ("ext4: update s_overhead_clusters in the superblock during an on-line resize") > Signed-off-by: Baokun Li <libaokun1@...wei.com> Yep, that looks correct. Sort of a pity that the checksum computation isn't quite as automatic as it is in other filesystems, but that's my fault... :/ Reviewed-by: Darrick J. Wong <djwong@...nel.org> --D > --- > fs/ext4/resize.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c > index 6dfe9ccae0c5..32fbfc173571 100644 > --- a/fs/ext4/resize.c > +++ b/fs/ext4/resize.c > @@ -1471,8 +1471,6 @@ static void ext4_update_super(struct super_block *sb, > * active. */ > ext4_r_blocks_count_set(es, ext4_r_blocks_count(es) + > reserved_blocks); > - ext4_superblock_csum_set(sb); > - unlock_buffer(sbi->s_sbh); > > /* Update the free space counts */ > percpu_counter_add(&sbi->s_freeclusters_counter, > @@ -1508,6 +1506,8 @@ static void ext4_update_super(struct super_block *sb, > ext4_calculate_overhead(sb); > es->s_overhead_clusters = cpu_to_le32(sbi->s_overhead); > > + ext4_superblock_csum_set(sb); > + unlock_buffer(sbi->s_sbh); > if (test_opt(sb, DEBUG)) > printk(KERN_DEBUG "EXT4-fs: added group %u:" > "%llu blocks(%llu free %llu reserved)\n", flex_gd->count, > -- > 2.31.1 >
Powered by blists - more mailing lists