From: Dan Williams <djbw@kernel.org>
To: Guangshuo Li <lgs201920130244@gmail.com>,
Vishal Verma <vishal.l.verma@intel.com>,
Dave Jiang <dave.jiang@intel.com>,
Andrew Morton <akpm@linux-foundation.org>,
nvdimm@lists.linux.dev, linux-cxl@vger.kernel.org,
linux-kernel@vger.kernel.org
Cc: Guangshuo Li <lgs201920130244@gmail.com>, stable@vger.kernel.org
Subject: Re: [PATCH] device-dax: Fix refcount leak in __devm_create_dev_dax() error path
Date: Sat, 11 Apr 2026 16:29:24 -0700 [thread overview]
Message-ID: <69dad954cbd27_fdcb41005c@djbw-dev.notmuch> (raw)
In-Reply-To: <20260411145726.2299438-1-lgs201920130244@gmail.com>
Guangshuo Li wrote:
> After device_initialize(), the lifetime of the embedded struct device is
> expected to be managed through the device core reference counting.
>
> In __devm_create_dev_dax(), several failure paths after
> device_initialize() free dev_dax directly instead of releasing the
> device reference with put_device(). This bypasses the normal device
> lifetime rules and may leave the reference count of the embedded struct
> device unbalanced, resulting in a refcount leak and potentially leading
> to a use-after-free.
Please do not list "theoretical" problems as justification. Point to
real problems.
> Fix this by assigning dev->type before device_initialize(), so the
> release callback is available for put_device(), and use put_device() in
> the post-initialization error paths. Keep dev_dax range cleanup explicit
> in the error path.
I see a more straightforward way to address just the practical problem
that also incorporates the other feedback I have below. Can you spot
that and fixup the changelog to address the practical impact?
> Fixes: c2f3011ee697f ("device-dax: add an allocation interface for device-dax instances")
> Cc: stable@vger.kernel.org
> Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
> ---
> drivers/dax/bus.c | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/dax/bus.c b/drivers/dax/bus.c
> index fde29e0ad68b..8753115cd371 100644
> --- a/drivers/dax/bus.c
> +++ b/drivers/dax/bus.c
> @@ -1453,6 +1453,7 @@ static struct dev_dax *__devm_create_dev_dax(struct dev_dax_data *data)
> }
>
> dev = &dev_dax->dev;
> + dev->type = &dev_dax_type;
> device_initialize(dev);
> dev_set_name(dev, "dax%d.%d", dax_region->id, dev_dax->id);
>
> @@ -1499,7 +1500,6 @@ static struct dev_dax *__devm_create_dev_dax(struct dev_dax_data *data)
> dev->devt = inode->i_rdev;
> dev->bus = &dax_bus_type;
> dev->parent = parent;
> - dev->type = &dev_dax_type;
>
> rc = device_add(dev);
> if (rc) {
> @@ -1523,14 +1523,21 @@ static struct dev_dax *__devm_create_dev_dax(struct dev_dax_data *data)
>
> err_alloc_dax:
> kfree(dev_dax->pgmap);
> + dev_dax->pgmap = NULL;
> +
> err_pgmap:
> free_dev_dax_ranges(dev_dax);
> + put_device(dev);
> + return ERR_PTR(rc);
> +
> err_range:
> - free_dev_dax_id(dev_dax);
> + put_device(dev);
> + return ERR_PTR(rc);
Please no gotos with early returns, that makes a mess.
next prev parent reply other threads:[~2026-04-11 23:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-11 14:57 [PATCH] device-dax: Fix refcount leak in __devm_create_dev_dax() error path Guangshuo Li
2026-04-11 23:29 ` Dan Williams [this message]
2026-04-12 6:40 ` Guangshuo Li
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=69dad954cbd27_fdcb41005c@djbw-dev.notmuch \
--to=djbw@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=dave.jiang@intel.com \
--cc=lgs201920130244@gmail.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nvdimm@lists.linux.dev \
--cc=stable@vger.kernel.org \
--cc=vishal.l.verma@intel.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.