All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Vladimir Oltean" <vladimir.oltean@nxp.com>
Cc: linux-pci@vger.kernel.org, wsa+renesas@sang-engineering.com
Subject: Re: [PATCH v8 phy-next 16/31] usb: host: tegra: avoid direct dereference of phy->dev.of_node
Date: Thu, 07 May 2026 08:00:04 +0000	[thread overview]
Message-ID: <20260507080004.AEE22C2BCC7@smtp.kernel.org> (raw)
In-Reply-To: <20260505100523.1922388-17-vladimir.oltean@nxp.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] This problem wasn't introduced by this patch, but a single `struct notifier_block` instance (`tegra->id_nb`) is registered to multiple USB PHY instances in a loop, causing linked list corruption.
- [High] This problem wasn't introduced by this patch, but the devm-managed USB PHY notifier unregistration happens after driver remove, allowing `tegra->id_work` to be scheduled after it is canceled.
--

commit dc45b6840f6afd2c371e491c07e3f59d5e2f3937
Author: Vladimir Oltean <vladimir.oltean@nxp.com>

usb: host: tegra: avoid direct dereference of phy->dev.of_node

This commit modifies the Tegra XHCI driver to use a parallel lookup path
using the 'phys' phandle to obtain the OF node, avoiding direct
dereferencing of phy->dev.of_node as the generic PHY subsystem moves to
opaque pointers.

> diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
> index d2214d309e965..6724a777ca2ac 100644
> --- a/drivers/usb/host/xhci-tegra.c
> +++ b/drivers/usb/host/xhci-tegra.c
> @@ -1504,23 +1505,34 @@ static int tegra_xusb_init_usb_phy(struct tegra_xusb *tegra)
>  	tegra->otg_usb3_port = -EINVAL;
>  
>  	for (i = 0; i < tegra->num_usb_phys; i++) {

[ ... ]

> +		err = of_parse_phandle_with_args(np, "phys", "#phy-cells",
> +						 index, &args);
> +		if (err)
> +			continue;
> +
> +		usbphy = devm_usb_get_phy_by_node(tegra->dev, args.np,
> +						  &tegra->id_nb);

This problem wasn't introduced by this patch, but does passing the same
&tegra->id_nb instance to multiple USB PHYs in this loop cause a linked list
corruption?

A struct notifier_block has a single next pointer used to maintain the linked
list. Registering the exact same block to multiple different PHY notifier
chains simultaneously could overwrite its next pointer, cross-linking and
corrupting the notifier lists.

Additionally, is there a risk of a use-after-free during driver removal due
to how this notifier is managed?

Because devm_usb_get_phy_by_node() uses devres to manage the PHY and its
notifier block, devres cleanup (which unregisters the notifier) runs after
the driver's remove() function returns.

If the notifier callback tegra_xhci_id_notify() schedules tegra->id_work,
could a hardware event fire after cancel_work_sync(&tegra->id_work) is
called in remove(), but before devres unregisters the notifier?

If so, the still-registered callback might execute and re-queue
tegra->id_work on freed memory.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260505100523.1922388-1-vladimir.oltean@nxp.com?part=16

  reply	other threads:[~2026-05-07  8:00 UTC|newest]

Thread overview: 158+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-05 10:04 [PATCH v8 phy-next 00/31] Split Generic PHY consumer and provider API Vladimir Oltean
2026-05-05 10:04 ` Vladimir Oltean
2026-05-05 10:04 ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 01/31] PCI: cadence: Preserve all error codes in cdns_plat_pcie_probe() Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 16:26   ` Bjorn Helgaas
2026-05-05 16:26     ` Bjorn Helgaas
2026-05-05 16:26     ` Bjorn Helgaas
2026-05-05 16:26     ` Bjorn Helgaas
2026-05-07  7:59   ` sashiko-bot
2026-05-07 15:50     ` Bjorn Helgaas
2026-05-05 10:04 ` [PATCH v8 phy-next 02/31] ata: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-07  7:59   ` sashiko-bot
2026-05-05 10:04 ` [PATCH v8 phy-next 03/31] PCI: Add missing headers transitively included by <linux/phy/phy.h> Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 04/31] usb: add " Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 05/31] drm: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 06/31] phy: " Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04 ` [PATCH v8 phy-next 07/31] phy: spacemit: include missing <linux/phy/phy.h> Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:04   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 08/31] net: lan969x: include missing <linux/of.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 09/31] PCI: Remove device links to PHY Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  7:59   ` sashiko-bot
2026-05-07 15:47     ` Bjorn Helgaas
2026-05-08  2:14       ` Hans Zhang
2026-05-05 10:05 ` [PATCH v8 phy-next 10/31] scsi: ufs: exynos: use dedicated API for updating PHY bus width Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  7:59   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 11/31] scsi: ufs: qcom: call phy_init() before phy_power_on() Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 12/31] scsi: ufs: qcom: make use of QMP PHY dynamic gear switching ability Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 13/31] scsi: ufs: qcom: keep separate track of PHY power state Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 14/31] scsi: ufs: qcom: include missing <linux/interrupt.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 15/31] drm/rockchip: dw_hdmi: avoid direct dereference of phy->dev.of_node Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-20 14:21   ` Heiko Stuebner
2026-05-20 14:21     ` Heiko Stuebner
2026-05-20 14:21     ` Heiko Stuebner
2026-05-20 14:21     ` Heiko Stuebner
2026-05-20 15:20     ` Vladimir Oltean
2026-05-20 15:20       ` Vladimir Oltean
2026-05-20 15:20       ` Vladimir Oltean
2026-05-20 15:20       ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 16/31] usb: host: tegra: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot [this message]
2026-05-05 10:05 ` [PATCH v8 phy-next 17/31] usb: gadget: tegra-xudc: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 18/31] phy: move provider API out of public <linux/phy/phy.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 19/31] phy: make phy_get_mode(), phy_get_bus_width() NULL tolerant Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 20/31] phy: introduce phy_get_max_link_rate() helper for consumers Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 21/31] drm/rockchip: dsi: include PHY provider header Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 22/31] drm: bridge: cdns-mhdp8546: use consumer API for getting PHY bus width Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 23/31] media: sunxi: a83-mips-csi2: include PHY provider header Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 24/31] net: renesas: rswitch: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 25/31] pinctrl: tegra-xusb: " Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 26/31] power: supply: cpcap-charger: include missing <linux/property.h> Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 27/31] phy: move ulpi_phy.h from include/linux/phy/ to drivers/phy/ Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 28/31] phy: include PHY provider header (1/2) Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 29/31] phy: include PHY provider header (2/2) Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05 ` [PATCH v8 phy-next 30/31] phy: remove temporary provider compatibility from consumer header Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-07  8:00   ` sashiko-bot
2026-05-05 10:05 ` [PATCH v8 phy-next 31/31] MAINTAINERS: add regexes for linux-phy Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-05 10:05   ` Vladimir Oltean
2026-05-21  9:38 ` (subset) [PATCH v8 phy-next 00/31] Split Generic PHY consumer and provider API Heiko Stuebner
2026-05-21  9:38   ` Heiko Stuebner
2026-05-21  9:38   ` Heiko Stuebner
2026-06-03 21:39 ` Sebastian Reichel
2026-06-03 21:39   ` Sebastian Reichel

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=20260507080004.AEE22C2BCC7@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=sashiko@lists.linux.dev \
    --cc=vladimir.oltean@nxp.com \
    --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.