From: sashiko-bot@kernel.org
To: "Sven Peter" <sven@kernel.org>
Cc: devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org
Subject: Re: [PATCH v2 10/22] thunderbolt: Unlock host router ports during startup
Date: Sun, 06 Sep 2026 19:03:39 +0000 [thread overview]
Message-ID: <20260906190340.01B761F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260906-b4-apple-soc-tbt-v2-10-1f80085f93fb@kernel.org>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [High] Empty downstream ports of the host router are not unlocked during system or runtime resume.
Pre-existing issues:
- [High] A concurrent execution of `tb_remove_work` during domain teardown causes a NULL pointer dereference because the work isn't fully synchronized before resources are cleared.
--
commit 26f03f28fcb6a632e2cb7c69ea5f90adb5f5b97b
Author: Sven Peter <sven@kernel.org>
thunderbolt: Unlock host router ports during startup
The downstream ports of the host router may still be locked after a
reset. Unlock them when the software connection manager starts before
scanning for any connected devices.
> diff --git a/drivers/thunderbolt/tb.c b/drivers/thunderbolt/tb.c
> index 47753a5c0f2eb..bf1c192ec10a5 100644
> --- a/drivers/thunderbolt/tb.c
> +++ b/drivers/thunderbolt/tb.c
> @@ -3049,6 +3050,14 @@ static int tb_start(struct tb *tb, bool reset)
> return dev_err_probe(tb->nhi->dev, ret, "failed to add host router\n");
> }
>
> + /* Make all host router downstream ports accessible to the CM. */
> + tb_switch_for_each_port(tb->root_switch, port) {
> + if (!tb_port_is_null(port))
> + continue;
> + if (tb_port_unlock(port))
> + tb_port_warn(port, "failed to unlock port\n");
> + }
> +
[Severity: High]
Does this logic also need to be applied during system or runtime resume?
If the system resumes from sleep and the hardware resets to its default
locked state, it appears empty ports might not be unlocked.
In drivers/thunderbolt/switch.c:tb_switch_resume(), tb_port_resume() is
used to check if a port had a connected device:
tb_switch_for_each_port(sw, port) {
if (!tb_port_is_null(port))
continue;
if (!tb_port_resume(port))
continue;
...
} else {
/*
* Always unlock the port so the downstream
* switch/domain is accessible.
*/
if (tb_port_unlock(port))
tb_port_warn(port, "failed to unlock port\n");
Because tb_port_resume() returns false for empty ports, the loop will
continue early and skip the tb_port_unlock() logic.
Will this prevent the software connection manager from discovering
downstream routers plugged in after wake?
[Severity: High]
This isn't a bug introduced by this patch, but I noticed a potential race
condition with tb_remove_work() that could lead to a NULL pointer
dereference during driver unbind or hot-unplug.
In drivers/thunderbolt/tb.c:tb_stop(), the driver attempts to cancel the
cleanup workqueue using a non-blocking cancel:
cancel_delayed_work(&tcm->remove_work);
If tb_remove_work() is already executing and waiting for tb->lock, it will
continue execution once tb_stop() releases the lock. Meanwhile, tb_stop()
proceeds to set tb->root_switch = NULL.
When tb_remove_work() acquires the lock, it observes tb->root_switch is
NULL:
drivers/thunderbolt/tb.c:tb_remove_work() {
...
mutex_lock(&tb->lock);
if (tb->root_switch)
tb_free_unplugged_children(tb->root_switch);
mutex_unlock(&tb->lock);
tb_free_unplugged_xdomains(tb->root_switch);
}
After dropping the lock, it unconditionally calls
tb_free_unplugged_xdomains(tb->root_switch), passing the NULL pointer.
Because tb_free_unplugged_xdomains() lacks a NULL check, can this
immediately dereference the pointer in the tb_switch_for_each_port() macro
and cause a panic?
> /*
> * To support highest CLx state, we set host router's TMU to
> * Normal mode.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260906-b4-apple-soc-tbt-v2-0-1f80085f93fb@kernel.org?part=10
next prev parent reply other threads:[~2026-09-06 19:03 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-06 18:36 [PATCH v2 00/22] Initial USB4/Thunderbolt support for Apple M1/M2/M3 SoCs Sven Peter
2026-09-06 18:36 ` [PATCH v2 01/22] usb: typec: Add alternate mode state notifiers Sven Peter
2026-09-06 18:48 ` sashiko-bot
2026-09-07 13:27 ` Joshua Peisach
2026-09-08 12:00 ` Heikki Krogerus
2026-09-06 18:36 ` [PATCH v2 02/22] usb: typec: Represent USB4 on the Type-C bus Sven Peter
2026-09-06 18:52 ` sashiko-bot
2026-09-07 13:31 ` Joshua Peisach
2026-09-08 12:07 ` Heikki Krogerus
2026-09-06 18:36 ` [PATCH v2 03/22] usb: typec: tipd: Register a USB4 port mode for CD321x Sven Peter
2026-09-06 18:47 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 04/22] usb: typec: tipd: Publish CD321x partner alternate modes Sven Peter
2026-09-06 18:54 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 05/22] dt-bindings: thunderbolt: Add Apple USB4/Thunderbolt NHI Sven Peter
2026-09-06 18:36 ` [PATCH v2 06/22] dt-bindings: thunderbolt: Add Apple USB4/Thunderbolt ACIO block Sven Peter
2026-09-06 18:36 ` [PATCH v2 07/22] thunderbolt: Try reading host DROM from device tree first Sven Peter
2026-09-06 18:36 ` [PATCH v2 08/22] thunderbolt: Don't read the UID if we already know it Sven Peter
2026-09-06 19:07 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 09/22] thunderbolt: Allocate ring HopID before requesting the ring interrupt Sven Peter
2026-09-06 18:36 ` [PATCH v2 10/22] thunderbolt: Unlock host router ports during startup Sven Peter
2026-09-06 19:03 ` sashiko-bot [this message]
2026-09-08 8:22 ` Mika Westerberg
2026-09-06 18:36 ` [PATCH v2 11/22] thunderbolt: Find Apple VSE capability " Sven Peter
2026-09-06 18:45 ` sashiko-bot
2026-09-07 13:38 ` Joshua Peisach
2026-09-08 20:24 ` Sven Peter
2026-09-06 18:36 ` [PATCH v2 12/22] thunderbolt: Add ring_interrupt_active to tb_nhi_ops Sven Peter
2026-09-06 18:36 ` [PATCH v2 13/22] thunderbolt: Add ring register accessors " Sven Peter
2026-09-08 8:32 ` Mika Westerberg
2026-09-06 18:36 ` [PATCH v2 14/22] thunderbolt: Add ring_interrupt_mask " Sven Peter
2026-09-06 18:36 ` [PATCH v2 15/22] thunderbolt: Add ring_configure " Sven Peter
2026-09-06 18:53 ` sashiko-bot
2026-09-06 18:36 ` [PATCH v2 16/22] thunderbolt: Add add_links " Sven Peter
2026-09-06 18:55 ` sashiko-bot
2026-09-08 8:35 ` Mika Westerberg
2026-09-06 18:36 ` [PATCH v2 17/22] thunderbolt: Add QUIRK_NO_USB3_BW_ALLOC Sven Peter
2026-09-06 18:36 ` [PATCH v2 18/22] thunderbolt: Export symbols required by the Apple Silicon driver Sven Peter
2026-09-06 18:36 ` [PATCH v2 19/22] thunderbolt: Add Apple Silicon support Sven Peter
2026-09-06 18:59 ` sashiko-bot
2026-09-08 9:18 ` Mika Westerberg
2026-09-08 19:02 ` Sven Peter
2026-09-08 19:04 ` Sven Peter
2026-09-09 6:06 ` Mika Westerberg
2026-09-09 15:20 ` Sven Peter
2026-09-09 15:25 ` Sven Peter
2026-09-10 4:52 ` Mika Westerberg
2026-09-10 4:50 ` Mika Westerberg
2026-09-06 18:36 ` [PATCH v2 20/22] arm64: dts: apple: t8103: Add USB4 ACIO and NHI Sven Peter
2026-09-06 18:36 ` [PATCH v2 21/22] arm64: dts: apple: t8112: " Sven Peter
2026-09-06 18:36 ` [PATCH v2 22/22] arm64: dts: apple: t60xx: " Sven Peter
2026-09-06 18:57 ` sashiko-bot
2026-09-07 13:52 ` [PATCH v2 00/22] Initial USB4/Thunderbolt support for Apple M1/M2/M3 SoCs Joshua Peisach
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=20260906190340.01B761F00A3A@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=sven@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox