From: Andi Shyti <andi.shyti@kernel.org>
To: Ma Ke <make_ruc2021@163.com>
Cc: westeri@kernel.org, linux-i2c@vger.kernel.org,
linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
akpm@linux-foundation.org, stable@vger.kernel.org
Subject: Re: [PATCH] i2c: acpi: Fix adapter reference leak in i2c_acpi_new_device_by_fwnode()
Date: Fri, 16 Oct 2026 02:44:27 +0200 [thread overview]
Message-ID: <atFs_gRIkFQ-eWfn@zenone.zhora.eu> (raw)
In-Reply-To: <20261012013421.3597430-1-make_ruc2021@163.com>
Hi Ma,
On Mon, Oct 12, 2026 at 09:34:21AM +0800, Ma Ke wrote:
> i2c_acpi_new_device_by_fwnode() obtains an i2c_adapter through
> i2c_acpi_find_adapter_by_handle(). That helper uses bus_find_device()
> internally, so it returns the adapter with a reference held:
>
> adapter = i2c_verify_adapter(dev);
> if (!adapter)
> put_device(dev);
>
> return adapter;
>
> The reference is only put on the failure path inside that helper. The
> caller owns it otherwise. i2c_acpi_new_device_by_fwnode() never drops
> it, neither on the -EPROBE_DEFER path nor after
> i2c_new_client_device(), so every call leaks one reference on the
> adapter and the adapter can never be released.
>
> i2c_new_client_device() does not consume that reference. It registers
> the new client with the adapter as its parent, and device_add() takes
> its own reference on the parent, which device_del() releases when the
> client goes away. The reference obtained by the lookup is a separate
> one and has to be dropped here.
actually device_del() can even end up looping indefinitely
waiting for the reference to drop to 0.
> i2c_acpi_notify() in the same file already does exactly this. It takes
> the adapter from the same helper, registers the client through
> i2c_acpi_register_device(), which calls i2c_new_client_device(), and
> then puts the reference.
>
> i2c_new_client_device() gives the client its own reference on the
> adapter, so ours can be dropped unconditionally.
>
> Found by code review.
>
> Fixes: 605f8fc22442 ("i2c: core: Add new i2c_acpi_new_device helper function")
> Cc: stable@vger.kernel.org
> Signed-off-by: Ma Ke <make_ruc2021@163.com>
Pushed to i2c/i2c-2.
Thanks,
Andi
next prev parent reply other threads:[~2026-10-16 0:44 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-12 1:34 [PATCH] i2c: acpi: Fix adapter reference leak in i2c_acpi_new_device_by_fwnode() Ma Ke
2026-10-16 0:44 ` Andi Shyti [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-09-16 15:55 Wentao Liang
2026-09-17 6:57 ` Mika Westerberg
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=atFs_gRIkFQ-eWfn@zenone.zhora.eu \
--to=andi.shyti@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=make_ruc2021@163.com \
--cc=stable@vger.kernel.org \
--cc=westeri@kernel.org \
/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.