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
| ||
|
Message-ID: <20240104104511.axpp3k4tti6xbk2l@quack3> Date: Thu, 4 Jan 2024 11:45:11 +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, yangerkun@...wei.com, yukuai3@...wei.com Subject: Re: [PATCH v2 6/8] ext4: avoid allocating blocks from corrupted group in ext4_mb_try_best_found() On Thu 21-12-23 23:05:56, Baokun Li wrote: > Determine if the group block bitmap is corrupted before using ac_b_ex in > ext4_mb_try_best_found() to avoid allocating blocks from a group with a > corrupted block bitmap in the following concurrency and making the > situation worse. > > ext4_mb_regular_allocator > ext4_lock_group(sb, group) > ext4_mb_good_group > // check if the group bbitmap is corrupted > ext4_mb_complex_scan_group > // Scan group gets ac_b_ex but doesn't use it > ext4_unlock_group(sb, group) > ext4_mark_group_bitmap_corrupted(group) > // The block bitmap was corrupted during > // the group unlock gap. > ext4_mb_try_best_found > ext4_lock_group(ac->ac_sb, group) > ext4_mb_use_best_found > mb_mark_used > // Allocating blocks in block bitmap corrupted group > > Signed-off-by: Baokun Li <libaokun1@...wei.com> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@...e.cz> Honza > --- > fs/ext4/mballoc.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c > index 03500aec43ac..2bb29f0077bd 100644 > --- a/fs/ext4/mballoc.c > +++ b/fs/ext4/mballoc.c > @@ -2303,6 +2303,9 @@ void ext4_mb_try_best_found(struct ext4_allocation_context *ac, > return; > > ext4_lock_group(ac->ac_sb, group); > + if (unlikely(EXT4_MB_GRP_BBITMAP_CORRUPT(e4b->bd_info))) > + goto out; > + > max = mb_find_extent(e4b, ex.fe_start, ex.fe_len, &ex); > > if (max > 0) { > @@ -2310,6 +2313,7 @@ void ext4_mb_try_best_found(struct ext4_allocation_context *ac, > ext4_mb_use_best_found(ac, e4b); > } > > +out: > ext4_unlock_group(ac->ac_sb, group); > ext4_mb_unload_buddy(e4b); > } > -- > 2.31.1 > -- Jan Kara <jack@...e.com> SUSE Labs, CR
Powered by blists - more mailing lists