From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Chao Yu <chao@kernel.org>
Cc: Ming Yan <yanming@tju.edu.cn>,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH v3] f2fs: fix to do sanity check for inline inode
Date: Mon, 16 May 2022 17:46:47 -0700 [thread overview]
Message-ID: <YoLwd3CUBIFn7+rS@google.com> (raw)
In-Reply-To: <20220515090547.1914-1-chao@kernel.org>
On 05/15, Chao Yu wrote:
> Yanming reported a kernel bug in Bugzilla kernel [1], which can be
> reproduced. The bug message is:
>
> The kernel message is shown below:
>
> kernel BUG at fs/inode.c:611!
> Call Trace:
> evict+0x282/0x4e0
> __dentry_kill+0x2b2/0x4d0
> dput+0x2dd/0x720
> do_renameat2+0x596/0x970
> __x64_sys_rename+0x78/0x90
> do_syscall_64+0x3b/0x90
>
> [1] https://bugzilla.kernel.org/show_bug.cgi?id=215895
>
> The bug is due to fuzzed inode has both inline_data and encrypted flags.
> During f2fs_evict_inode(), as the inode was deleted by rename(), it
> will cause inline data conversion due to conflicting flags. The page
> cache will be polluted and the panic will be triggered in clear_inode().
>
> Try fixing the bug by doing more sanity checks for inline data inode in
> sanity_check_inode().
>
> Cc: stable@vger.kernel.org
> Reported-by: Ming Yan <yanming@tju.edu.cn>
> Signed-off-by: Chao Yu <chao.yu@oppo.com>
> ---
> v3:
> - clean up commit message suggested by Bagas Sanjaya.
> fs/f2fs/f2fs.h | 8 ++++++++
> fs/f2fs/inode.c | 3 +--
> 2 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 492af5b96de1..0dc2461ef02c 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -4126,6 +4126,14 @@ static inline void f2fs_set_encrypted_inode(struct inode *inode)
> */
> static inline bool f2fs_post_read_required(struct inode *inode)
> {
> + /*
> + * used by sanity_check_inode(), when disk layout fields has not
> + * been synchronized to inmem fields.
> + */
> + if (S_ISREG(inode->i_mode) && (file_is_encrypt(inode) ||
> + F2FS_I(inode)->i_flags & F2FS_COMPR_FL ||
> + file_is_verity(inode)))
> + return true;
Again, I prefer to check this in sanity_check_inode(), since we don't need to
check all the time here.
> return f2fs_encrypted_file(inode) || fsverity_active(inode) ||
> f2fs_compressed_file(inode);
> }
> diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
> index 2fce8fa0dac8..5e494c98e3c2 100644
> --- a/fs/f2fs/inode.c
> +++ b/fs/f2fs/inode.c
> @@ -276,8 +276,7 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
> }
> }
>
> - if (f2fs_has_inline_data(inode) &&
> - (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode))) {
> + if (f2fs_has_inline_data(inode) && !f2fs_may_inline_data(inode)) {
> set_sbi_flag(sbi, SBI_NEED_FSCK);
> f2fs_warn(sbi, "%s: inode (ino=%lx, mode=%u) should not have inline_data, run fsck to fix",
> __func__, inode->i_ino, inode->i_mode);
> --
> 2.32.0
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Chao Yu <chao@kernel.org>
Cc: linux-f2fs-devel@lists.sourceforge.net,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
Ming Yan <yanming@tju.edu.cn>, Chao Yu <chao.yu@oppo.com>
Subject: Re: [PATCH v3] f2fs: fix to do sanity check for inline inode
Date: Mon, 16 May 2022 17:46:47 -0700 [thread overview]
Message-ID: <YoLwd3CUBIFn7+rS@google.com> (raw)
In-Reply-To: <20220515090547.1914-1-chao@kernel.org>
On 05/15, Chao Yu wrote:
> Yanming reported a kernel bug in Bugzilla kernel [1], which can be
> reproduced. The bug message is:
>
> The kernel message is shown below:
>
> kernel BUG at fs/inode.c:611!
> Call Trace:
> evict+0x282/0x4e0
> __dentry_kill+0x2b2/0x4d0
> dput+0x2dd/0x720
> do_renameat2+0x596/0x970
> __x64_sys_rename+0x78/0x90
> do_syscall_64+0x3b/0x90
>
> [1] https://bugzilla.kernel.org/show_bug.cgi?id=215895
>
> The bug is due to fuzzed inode has both inline_data and encrypted flags.
> During f2fs_evict_inode(), as the inode was deleted by rename(), it
> will cause inline data conversion due to conflicting flags. The page
> cache will be polluted and the panic will be triggered in clear_inode().
>
> Try fixing the bug by doing more sanity checks for inline data inode in
> sanity_check_inode().
>
> Cc: stable@vger.kernel.org
> Reported-by: Ming Yan <yanming@tju.edu.cn>
> Signed-off-by: Chao Yu <chao.yu@oppo.com>
> ---
> v3:
> - clean up commit message suggested by Bagas Sanjaya.
> fs/f2fs/f2fs.h | 8 ++++++++
> fs/f2fs/inode.c | 3 +--
> 2 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> index 492af5b96de1..0dc2461ef02c 100644
> --- a/fs/f2fs/f2fs.h
> +++ b/fs/f2fs/f2fs.h
> @@ -4126,6 +4126,14 @@ static inline void f2fs_set_encrypted_inode(struct inode *inode)
> */
> static inline bool f2fs_post_read_required(struct inode *inode)
> {
> + /*
> + * used by sanity_check_inode(), when disk layout fields has not
> + * been synchronized to inmem fields.
> + */
> + if (S_ISREG(inode->i_mode) && (file_is_encrypt(inode) ||
> + F2FS_I(inode)->i_flags & F2FS_COMPR_FL ||
> + file_is_verity(inode)))
> + return true;
Again, I prefer to check this in sanity_check_inode(), since we don't need to
check all the time here.
> return f2fs_encrypted_file(inode) || fsverity_active(inode) ||
> f2fs_compressed_file(inode);
> }
> diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
> index 2fce8fa0dac8..5e494c98e3c2 100644
> --- a/fs/f2fs/inode.c
> +++ b/fs/f2fs/inode.c
> @@ -276,8 +276,7 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
> }
> }
>
> - if (f2fs_has_inline_data(inode) &&
> - (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode))) {
> + if (f2fs_has_inline_data(inode) && !f2fs_may_inline_data(inode)) {
> set_sbi_flag(sbi, SBI_NEED_FSCK);
> f2fs_warn(sbi, "%s: inode (ino=%lx, mode=%u) should not have inline_data, run fsck to fix",
> __func__, inode->i_ino, inode->i_mode);
> --
> 2.32.0
next prev parent reply other threads:[~2022-05-17 0:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-15 9:05 [f2fs-dev] [PATCH v3] f2fs: fix to do sanity check for inline inode Chao Yu
2022-05-15 9:05 ` Chao Yu
2022-05-17 0:46 ` Jaegeuk Kim [this message]
2022-05-17 0:46 ` Jaegeuk Kim
2022-05-17 2:28 ` [f2fs-dev] " Chao Yu
2022-05-17 2:28 ` Chao Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YoLwd3CUBIFn7+rS@google.com \
--to=jaegeuk@kernel.org \
--cc=chao@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=yanming@tju.edu.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.