From: Dave Chinner <dgc@kernel.org>
To: Igor Putko <igorpetindev@gmail.com>
Cc: Carlos Maiolino <cem@kernel.org>,
Dave Chinner <dchinner@redhat.com>,
linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org,
syzbot+c32fff62cf4913d345d0c@syzkaller.appspotmail.com,
Jeffin Philip <jeffinphilip14@gmail.com>
Subject: Re: [PATCH] xfs: do not release buf log item prematurely in xfs_buf_item_done
Date: Mon, 19 Oct 2026 07:29:53 +1100 [thread overview]
Message-ID: <atUsQVuCKnAIZc3X@dread> (raw)
In-Reply-To: <20261018170913.3104-1-igorpetindev@gmail.com>
On Sun, Oct 18, 2026 at 08:09:13PM +0300, Igor Putko wrote:
> When a buffer with an active log item is written synchronously to disk
> via xfs_bwrite() (for example, in xfs_sync_sb_buf() during
> FS_IOC_SETFSLABEL), I/O completion invokes xfs_buf_item_done().
>
> Currently, xfs_buf_item_done() unconditionally calls
> xfs_buf_item_relse(), which frees the xfs_buf_log_item even if it still
> has active references (e.g. bli_refcount > 0 while the item is pinned in
> a CIL context and queued on cilpcp->log_items). When xlog_cil_push_work()
> subsequently runs on another CPU, xlog_cil_push_pcp_aggregate() accesses
> the freed log item while splicing cilpcp->log_items, triggering a
> slab-use-after-free:
>
> BUG: KASAN: slab-use-after-free in xlog_cil_push_pcp_aggregate
> Write of size 8 at addr ffff888036db9c40 by task kworker/u8:7/300
> Call Trace:
> <TASK>
> __list_splice include/linux/list.h:577 [inline]
> list_splice_init include/linux/list.h:619 [inline]
> xlog_cil_push_pcp_aggregate fs/xfs/xfs_log_cil.c:137 [inline]
> xlog_cil_push_work+0x986/0x2a90 fs/xfs/xfs_log_cil.c:1417
>
> Fix this by checking if the buf log item still has active references
> in xfs_buf_item_done(). If bli_refcount is elevated, the item is still
> owned by an ongoing transaction or the CIL and must not be torn down.
>
> Fixes: d2fe5c4c8d25 ("xfs: rearrange code in xfs_buf_item.c")
> Reported-by: syzbot+c32fff62cf4913d345d0c@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=c32ff62cf4913d345d0c
> Signed-off-by: Igor Putko <igorpetindev@gmail.com>
> ---
> fs/xfs/xfs_buf_item.c | 12 ++++++++++--
> 1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
> index 1a4ef34af8d5..6b32061bac53 100644
> --- a/fs/xfs/xfs_buf_item.c
> +++ b/fs/xfs/xfs_buf_item.c
> @@ -1067,6 +1067,14 @@ xfs_buf_item_done(
> struct xfs_buf *bp)
> {
> struct xfs_buf_log_item *bip = bp->b_log_item;
> + struct xfs_log_item *lip = &bip->bli_item;
> +
> + /*
> + * If the log item still has active references (e.g. pinned by the CIL
> + * or held by an ongoing transaction), we cannot tear it down here.
> + */
> + if (atomic_read(&bip->bli_refcount) > 0)
> + return;
As I have said several times before: this does not fix the UAF.
Please review the mailing list for similar issues and discussion
before posting fixes.
I've already outlined the root cause and overall fix direction here:
https://lore.kernel.org/all/aqI6v-_dc2DDSbgB@dread/
Jeffin (cc'd) had started working on this, but I don't know how far
he has got with it.
-Dave.
--
Dave Chinner
dgc@kernel.org
prev parent reply other threads:[~2026-10-18 20:30 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-18 17:09 [PATCH] xfs: do not release buf log item prematurely in xfs_buf_item_done Igor Putko
2026-10-18 20:29 ` Dave Chinner [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=atUsQVuCKnAIZc3X@dread \
--to=dgc@kernel.org \
--cc=cem@kernel.org \
--cc=dchinner@redhat.com \
--cc=igorpetindev@gmail.com \
--cc=jeffinphilip14@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=syzbot+c32fff62cf4913d345d0c@syzkaller.appspotmail.com \
/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.