From: sashiko-bot@kernel.org
To: "Sherry Sun (OSS)" <sherry.sun@oss.nxp.com>
Cc: Frank.Li@kernel.org, imx@lists.linux.dev
Subject: Re: [PATCH V7] Bluetooth: btnxpuart: Add M.2 Bluetooth device support using pwrseq
Date: Tue, 21 Jul 2026 03:12:50 +0000 [thread overview]
Message-ID: <20260721031251.5D7B01F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260721030458.1160824-1-sherry.sun@oss.nxp.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] Initialization ordering race in probe where the device is exposed to the system before synchronization primitives are fully initialized.
- [High] Teardown ordering bug leading to Use-After-Destroy of synchronization primitives during device removal.
--
--- Patch [1]: [PATCH V7] Bluetooth: btnxpuart: Add M.2 Bluetooth device support using pwrseq ---
commit aa33fbd5b00c9432b2b3b5cc158c49ae5ac11d72
Author: Sherry Sun <sherry.sun@nxp.com>
Bluetooth: btnxpuart: Add M.2 Bluetooth device support using pwrseq
Power supply to the M.2 Bluetooth device attached to the host using M.2
connector is controlled using the 'uart' pwrseq device. So add support
for getting the pwrseq device if the OF graph link is present.
> diff --git a/drivers/bluetooth/btnxpuart.c b/drivers/bluetooth/btnxpuart.c
> index 0bb300eef157c..81a11ac051146 100644
> --- a/drivers/bluetooth/btnxpuart.c
> +++ b/drivers/bluetooth/btnxpuart.c
[ ... ]
> @@ -1907,13 +1925,16 @@ static int nxp_serdev_probe(struct serdev_device *serdev)
> if (bacmp(&ba, BDADDR_ANY))
> hci_set_quirk(hdev, HCI_QUIRK_USE_BDADDR_PROPERTY);
>
> - if (hci_register_dev(hdev) < 0) {
> + err = hci_register_dev(hdev);
> + if (err < 0) {
> dev_err(&serdev->dev, "Can't register HCI device\n");
> goto probe_fail;
> }
>
> - if (ps_setup(hdev))
> + if (ps_setup(hdev)) {
[Severity: High]
This isn't a bug introduced by this patch, but does this probe initialization
order expose the device to incoming traffic before its synchronization
primitives are fully set up?
In nxp_serdev_probe(), hci_register_dev() is called before ps_setup().
hci_register_dev() exposes the device and queues the power_on work which
calls hci_dev_do_open() -> btnxpuart_open() -> serdev_device_open().
Once opened, incoming UART data can trigger btnxpuart_receive_buf().
This calls ps_start_timer(), which executes mod_timer(). Because ps_setup()
(which initializes the timer via timer_setup()) hasn't executed yet, could
this cause an Oops on an uninitialized timer?
> + err = -ENODEV;
> goto probe_fail_unregister;
> + }
>
> hci_devcd_register(hdev, nxp_coredump, nxp_coredump_hdr,
> nxp_coredump_notify);
[ ... ]
> @@ -1952,6 +1976,8 @@ static void nxp_serdev_remove(struct serdev_device *serdev)
> ps_cleanup(nxpdev);
> hci_unregister_dev(hdev);
> reset_control_assert(nxpdev->pdn);
[Severity: High]
This is a pre-existing issue, but does this teardown order lead to a
use-after-destroy of the synchronization primitives?
In nxp_serdev_remove(), ps_cleanup() is called before hci_unregister_dev().
ps_cleanup() explicitly destroys psdata->ps_lock and shuts down
psdata->ps_timer.
However, the underlying UART (serdev) is not closed until
hci_unregister_dev() executes (which calls hci_dev_do_close() ->
btnxpuart_close() -> serdev_device_close()).
If UART data arrives in the window between ps_cleanup() and
hci_unregister_dev(), btnxpuart_receive_buf() will run and call
ps_start_timer(), manipulating the destroyed timer. Additionally, it can
trigger btnxpuart_tx_wakeup() -> btnxpuart_tx_work() -> ps_wakeup(), which
attempts to lock the destroyed psdata->ps_lock.
> + if (nxpdev->pwrseq)
> + pwrseq_put(nxpdev->pwrseq);
> hci_free_dev(hdev);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260721030458.1160824-1-sherry.sun@oss.nxp.com?part=1
next prev parent reply other threads:[~2026-07-21 3:12 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-21 3:04 [PATCH V7] Bluetooth: btnxpuart: Add M.2 Bluetooth device support using pwrseq Sherry Sun (OSS)
2026-07-21 3:12 ` sashiko-bot [this message]
2026-07-21 4:13 ` [V7] " bluez.test.bot
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=20260721031251.5D7B01F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=Frank.Li@kernel.org \
--cc=imx@lists.linux.dev \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sherry.sun@oss.nxp.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.