From: "Darrick J. Wong" <djwong@kernel.org>
To: Weiming Shi <bestswngs@gmail.com>
Cc: linux-xfs@vger.kernel.org, Carlos Maiolino <cem@kernel.org>,
Brian Foster <bfoster@redhat.com>,
Christoph Hellwig <hch@infradead.org>, Xiang Mei <xmei5@asu.edu>,
stable@vger.kernel.org
Subject: Re: [PATCH v3] xfs: fail recovery on a committed log item with no regions
Date: Thu, 2 Jul 2026 12:45:23 -0700 [thread overview]
Message-ID: <20260702194523.GO9392@frogsfrogsfrogs> (raw)
In-Reply-To: <20260702162000.3548359-4-bestswngs@gmail.com>
On Thu, Jul 02, 2026 at 09:20:00AM -0700, Weiming Shi wrote:
> If the first op of a transaction is a bare transaction header
> (len == sizeof(struct xfs_trans_header)), xlog_recover_add_to_trans()
> adds an item but no region, leaving it on r_itemq with ri_cnt == 0 and
> ri_buf == NULL.
>
> The header can be split across op records, so later ops may still add
> regions; the item is only invalid if the transaction commits with none.
> The runtime commit path never emits such a transaction, so this only
> happens on a crafted log. It came from an AI-assisted code audit of the
> recovery parser.
>
> xlog_recover_reorder_trans() calls ITEM_TYPE() on the item, which reads
> *(unsigned short *)item->ri_buf[0].iov_base and faults on the NULL
> ri_buf. Reject it there, before the commit handlers that also read
> ri_buf[0].
>
> KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
> RIP: 0010:xlog_recover_reorder_trans (fs/xfs/xfs_log_recover.c:1836)
> xlog_recover_commit_trans (fs/xfs/xfs_log_recover.c:2043)
> xlog_recover_process_data (fs/xfs/xfs_log_recover.c:2501)
> xlog_do_recovery_pass (fs/xfs/xfs_log_recover.c:3244)
> xlog_recover (fs/xfs/xfs_log_recover.c:3493)
> xfs_log_mount (fs/xfs/xfs_log.c:618)
> xfs_mountfs (fs/xfs/xfs_mount.c:1034)
> xfs_fs_fill_super (fs/xfs/xfs_super.c:1938)
> vfs_get_tree (fs/super.c:1695)
> path_mount (fs/namespace.c:4161)
> __x64_sys_mount (fs/namespace.c:4367)
>
> Fixes: 89cebc847729 ("xfs: validate transaction header length on log recovery")
> Cc: <stable@vger.kernel.org> # v4.3
> Reported-by: Xiang Mei <xmei5@asu.edu>
> Assisted-by: Claude:claude-opus-4-8
> Signed-off-by: Weiming Shi <bestswngs@gmail.com>
Good catch!
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> fs/xfs/xfs_log_recover.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
> index 103b2a79667b..fdb011e6ef60 100644
> --- a/fs/xfs/xfs_log_recover.c
> +++ b/fs/xfs/xfs_log_recover.c
> @@ -1907,6 +1907,15 @@ xlog_recover_reorder_trans(
> list_for_each_entry_safe(item, n, &sort_list, ri_list) {
> enum xlog_recover_reorder fate = XLOG_REORDER_ITEM_LIST;
>
> + /* a committed item with no regions has a NULL ri_buf[0] */
> + if (!item->ri_cnt || !item->ri_buf) {
> + xfs_warn(log->l_mp,
> + "%s: committed log item has no regions",
> + __func__);
> + error = -EFSCORRUPTED;
> + break;
> + }
> +
> item->ri_ops = xlog_find_item_ops(item);
> if (!item->ri_ops) {
> xfs_warn(log->l_mp,
> --
> 2.43.0
>
>
prev parent reply other threads:[~2026-07-02 19:45 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-02 16:19 [PATCH v3 0/3] xfs: fix NULL deref in log recovery reorder Weiming Shi
2026-07-02 16:19 ` [PATCH v3 1/3] xfs: drop ASSERT(0) on unrecognized log item type Weiming Shi
2026-07-02 16:19 ` [PATCH v3 2/3] xfs: splice unsorted log items back to the transaction after the loop Weiming Shi
2026-07-02 16:20 ` [PATCH v3] xfs: fail recovery on a committed log item with no regions Weiming Shi
2026-07-02 19:45 ` Darrick J. Wong [this message]
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=20260702194523.GO9392@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=bestswngs@gmail.com \
--cc=bfoster@redhat.com \
--cc=cem@kernel.org \
--cc=hch@infradead.org \
--cc=linux-xfs@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=xmei5@asu.edu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox