From: "Darrick J. Wong" <djwong@kernel.org>
To: Dawei Feng <dawei.feng@seu.edu.cn>
Cc: cem@kernel.org, linux-xfs@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
jianhao.xu@seu.edu.cn, zilin@seu.edu.cn
Subject: Re: [PATCH] xfs: fix memory leak in xfs_dqinode_metadir_create()
Date: Mon, 29 Jun 2026 13:04:49 -0700 [thread overview]
Message-ID: <20260629200449.GB6078@frogsfrogsfrogs> (raw)
In-Reply-To: <20260627060402.2544349-1-dawei.feng@seu.edu.cn>
On Sat, Jun 27, 2026 at 02:04:02PM +0800, Dawei Feng wrote:
> If xfs_metadir_create() fails in xfs_dqinode_metadir_create(), the current
> code returns directly, leaking the allocated update and transaction state.
> If the subsequent commit fails, the caller-owned inode reference is left
> behind.
>
> Fix this memory leak by routing the create failure path through
> xfs_metadir_cancel(). For both create and commit failures, finish and
> release any inode returned to the caller, mirroring the unwind pattern in
> xfs_metadir_mkdir().
>
> The bug was first flagged by an experimental analysis tool we are
> developing for kernel memory-management bugs while analyzing
> v6.13-rc1. The tool is still under development and is not yet publicly
> available. Manual inspection confirms that the bug is still
> present in v7.1.1.
>
> An x86_64 allyesconfig build showed no new warnings. Runtime validation
> used kprobe fault injection during `mount -o uquota` on a metadir XFS
> image. Injecting xfs_metadir_create() reproduced the old active-update path
> that left mount stuck later in mount setup; after this change, the same
> injection reported cancel_hits=1 and irele_hits=1. Injecting
> xfs_metadir_commit() exercised the old inode-reference leak path; after
> this change, it reported irele_hits=1.
>
> Fixes: e80fbe1ad8ef ("xfs: use metadir for quota inodes")
> Cc: stable@vger.kernel.org
> Signed-off-by: Dawei Feng <dawei.feng@seu.edu.cn>
Heh, I have a patch just like this one in my tree courtesy of codex,
so I think this is fair:
Cc: <stable@vger.kernel.org> # v6.13
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> ---
> fs/xfs/libxfs/xfs_dquot_buf.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c
> index ce767b40482f..bbada0d3cc08 100644
> --- a/fs/xfs/libxfs/xfs_dquot_buf.c
> +++ b/fs/xfs/libxfs/xfs_dquot_buf.c
> @@ -436,17 +436,27 @@ xfs_dqinode_metadir_create(
>
> error = xfs_metadir_create(&upd, S_IFREG);
> if (error)
> - return error;
> + goto out_cancel;
>
> xfs_trans_log_inode(upd.tp, upd.ip, XFS_ILOG_CORE);
>
> error = xfs_metadir_commit(&upd);
> if (error)
> - return error;
> + goto out_irele;
>
> xfs_finish_inode_setup(upd.ip);
> *ipp = upd.ip;
> return 0;
> +
> +out_cancel:
> + xfs_metadir_cancel(&upd, error);
> +out_irele:
> + /* Have to finish setting up the inode to ensure it's deleted. */
> + if (upd.ip) {
> + xfs_finish_inode_setup(upd.ip);
> + xfs_irele(upd.ip);
> + }
> + return error;
> }
>
> #ifndef __KERNEL__
> --
> 2.34.1
>
>
next prev parent reply other threads:[~2026-06-29 20:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-27 6:04 [PATCH] xfs: fix memory leak in xfs_dqinode_metadir_create() Dawei Feng
2026-06-29 20:04 ` Darrick J. Wong [this message]
2026-07-01 12:50 ` Carlos Maiolino
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=20260629200449.GB6078@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=cem@kernel.org \
--cc=dawei.feng@seu.edu.cn \
--cc=jianhao.xu@seu.edu.cn \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=zilin@seu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox