From: Johan Hovold <johan@kernel.org>
To: Andi Shyti <andi.shyti@kernel.org>
Cc: Wolfram Sang <wsa+renesas@sang-engineering.com>,
linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH 1/3] i2c: dev: fix blocked adapter deregistration
Date: Thu, 27 Aug 2026 11:43:34 +0200 [thread overview]
Message-ID: <apAGxmeDmdTTYgCQ@hovoldconsulting.com> (raw)
In-Reply-To: <20260827090804.638565-2-johan@kernel.org>
On Thu, Aug 27, 2026 at 11:08:02AM +0200, Johan Hovold wrote:
> The i2c subsystem allows controllers to be used by non-child devices
> that may remain registered after an adapter goes away.
>
> To handle this, adapter deregistration blocks until the last reference
> to the adapter is released. Albeit unorthodox, this is mostly fine for
> the vast majority of controllers but can cause some trouble when
> controllers reside on hotpluggable buses.
>
> Specifically, userspace can prevent an adapter from being deregistered
> indefinitely by holding an i2c-dev character device file open. And with
> USB attached controllers this prevents further hub events from being
> processed by the parent hub until the file is closed.
>
> Fix the i2c-dev implementation by dropping the additional reference
> taken at open() and using an rwsem to make sure the adapter is only
> accessed while registered.
>
> Note that before commit 611e12ea0f12 ("i2c: core: manage i2c bus device
> refcount in i2c_[get|put]_adapter") an adapter going away would instead
> have resulted in a use-after-free.
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Cc: stable@vger.kernel.org
> Signed-off-by: Johan Hovold <johan@kernel.org>
> static int i2cdev_open(struct inode *inode, struct file *file)
> {
> - unsigned int minor = iminor(inode);
> + struct i2c_dev *i2c_dev = container_of(inode->i_cdev, struct i2c_dev, cdev);
> + struct i2c_adapter *adap = i2c_dev->adap;
Bah, I of course need to take the rwsem here as well as pointed out by
Sashiko.
Let me respin.
Johan
next prev parent reply other threads:[~2026-08-27 9:43 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 9:08 [PATCH 0/3] i2c: dev: fix blocked adapter deregistration Johan Hovold
2026-08-27 9:08 ` [PATCH 1/3] " Johan Hovold
2026-08-27 9:43 ` Johan Hovold [this message]
2026-08-27 9:08 ` [PATCH 2/3] i2c: dev: drop unnecessary sysfs device lookup Johan Hovold
2026-08-27 9:08 ` [PATCH 3/3] i2c: dev: clean up registration Johan Hovold
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=apAGxmeDmdTTYgCQ@hovoldconsulting.com \
--to=johan@kernel.org \
--cc=andi.shyti@kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=wsa+renesas@sang-engineering.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.