From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Felix Gu <ustc.gu@gmail.com>
Cc: Mark Brown <broonie@kernel.org>,
linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 1/1] spi: Simplify devm_spi_*_controller()
Date: Wed, 25 Mar 2026 13:36:18 +0200 [thread overview]
Message-ID: <acPIsrozxf5bAoHI@ashevche-desk.local> (raw)
In-Reply-To: <CAN4SLj2ybx6Hici+KDbfQScxOcoVSxV56mTncCn7OVpKVRXEDQ@mail.gmail.com>
On Wed, Mar 25, 2026 at 06:22:33PM +0800, Felix Gu wrote:
> On Wed, Mar 25, 2026 at 5:54 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
> >
> > > It seems has a potential corner case in this commit.
> > >
> > > The issue is that devm_add_action_or_reset() triggers its callback
> > > immediately if the internal devres allocation fails.
> >
> > Yes, it does.
> >
> > > This creates the following sequence:
> > > 1. spi_register_controller(ctlr) succeeds.
> > > 2. devm_add_action_or_reset() is called but fails.
> > > 3. The "reset" triggers devm_spi_unregister_controller(ctlr) immediately.
> > > 4. This calls spi_unregister_controller(ctlr).
> > > 5. For controllers allocated via spi_alloc_host() (where
> > > ctlr->devm_allocated is false), spi_unregister_controller() calls
> > > put_device(&ctlr->dev).
> > > 6. This drops the reference count to zero and frees the ctlr structure.
> >
> > I am not sure I see how the sequence is different from the say this
> >
> > ret = spi_register_controller(...)
> > if (ret)
> > goto err;
> > // ...if success do something else...
> > ret = foo();
> > if (ret) {
> > spi_unregister_controller(...);
> > goto err;
> > }
> >
> > So, each driver should be prepared for an error handling in which it should
> > release resources in the reversed order.
> >
> > > However, the driver still holds the ctlr pointer and will typically
> > > attempt its own cleanup, leading to a use-after-free or double-free.
> >
> > You mean buggy driver? Any real example of the use case?
> >
> > In the 5. you implied something like
> >
> > ret = spi_alloc_host();
> > ...
> > ret = devm_spi_register_controller()
> >
> > ?
> >
> > But this is against the rule how devm must be used.
> >
> > > What are your thoughts on this? Does this analysis seem correct, or am
> > > I missing a detail in how the refcounting is handled here?
> >
> > Is this analysis AI assisted?
>
> I got the thoughts from an AI review from sashiko and verified it on my own.
> https://sashiko.dev/#/patchset/20260322-rockchip-v1-1-fac3f0c6dad8%40gmail.com
You must have said that in the first place. And have you found a real bug
when verified on your own? Or is it just theoretical possibility? If 'yes'
is the answer to the last question, then theoretically we have thousands
of ways in the kernel to shoot ourselves in the foot.
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2026-03-25 11:36 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-08 17:51 Andy Shevchenko
2026-01-09 15:30 ` Mark Brown
2026-03-24 14:55 ` Felix Gu
2026-03-25 9:54 ` Andy Shevchenko
2026-03-25 10:22 ` Felix Gu
2026-03-25 11:36 ` Andy Shevchenko [this message]
2026-03-25 15:03 ` Johan Hovold
2026-03-26 9:29 ` Andy Shevchenko
2026-03-25 14:59 ` Johan Hovold
-- strict thread matches above, loose matches on Subject: below --
2025-11-27 19:51 Andy Shevchenko
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=acPIsrozxf5bAoHI@ashevche-desk.local \
--to=andriy.shevchenko@linux.intel.com \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=ustc.gu@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®