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] [day] [month] [year] [list]
Date:   Tue, 20 Sep 2022 23:29:02 +0800
From:   Chao Yu <chao@...nel.org>
To:     "zhiguo.niu" <zhiguo.niu@...soc.com>, jaegeuk@...nel.org,
        linux-f2fs-devel@...ts.sourceforge.net,
        linux-kernel@...r.kernel.org
Cc:     niuzhiguo84@...il.com, xiuhong.wang@...soc.com
Subject: Re: [PATCH V3] f2fs: fix some error handling case in gc

On 2022/9/20 9:27, zhiguo.niu wrote:
> During GC, if segment type stored in SSA and SIT is inconsistent,
> we set SBI_NEED_FSCK first and then stop checkpoint, this will
> cause the following issues:
> 1. SBI_NEED_FSCK can not be set to flash truly because of checkpoint
> has been stopped.
> 2. Will cause more EIO error if user use f2fs because of CP_ERROR_FLAG
> has been set in f2fs_stop_checkpoint, this is not reasonable.
> 
> So we fix this error handling case by recording current victim segment
> as invalid for gc and do not stop checkpoint.
> 1. SBI_NEED_FSCK will still be set but not do f2fs_stop_checkpoint for
> f2fs.fsck to have opportunity to fix the inconsistent segment type
> in SSA and SIT.
> 2. Let user can still use fs, avoid EIO error for some operations such
> as read and write,etc.
> 3. If current segment has inconsistent segment type in SSA and SIT,
> we add this segment segno in SIT_I(sbi)->invalid_segmap to skip this
> segment to avoid deadloop in gc,similar as commit bbf9f7d90f21 ("f2fs:
> Fix indefinite loop in f2fs_gc()")
> 
> Fixes: 793ab1c8a792 ("f2fs: fix to avoid deadloop in foreground GC")
> Signed-off-by: zhiguo.niu <zhiguo.niu@...soc.com>
> ---
> changes of v3: keep "set SBI_NEED_FSCK and f2fs_err()" as before and
> do not depend on CONFIG_F2FS_CHECK_FS as Chao's suggestion.
> ---
> ---
>   fs/f2fs/gc.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
> index d5fb426e0747..f354883872f6 100644
> --- a/fs/f2fs/gc.c
> +++ b/fs/f2fs/gc.c
> @@ -1703,7 +1703,10 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
>   			f2fs_err(sbi, "Inconsistent segment (%u) type [%d, %d] in SSA and SIT",
>   				 segno, type, GET_SUM_TYPE((&sum->footer)));
>   			set_sbi_flag(sbi, SBI_NEED_FSCK);
> -			f2fs_stop_checkpoint(sbi, false);

f2fs_stop_checkpoint() was added in commit 793ab1c8a792 ("f2fs: fix to avoid
deadloop in foreground GC"), in order to avoid deadlock issue reported in
bugzilla, it needs to check this patch w/ the fuzzed image.

Bug 203211:
https://bugzilla.kernel.org/show_bug.cgi?id=203211

Fuzzed image:
https://bugzilla.kernel.org/attachment.cgi?id=282203

Thanks,

> +#ifdef CONFIG_F2FS_CHECK_FS
> +			if (!test_bit(segno, SIT_I(sbi)->invalid_segmap))
> +				set_bit(segno, SIT_I(sbi)->invalid_segmap);
> +#endif
>   			goto skip;
>   		}
>   

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ