[PATCH v14 05/38] phy: rockchip: usbdp: Handle missing clock-names DT property gracefully
sashiko-bot at kernel.org
sashiko-bot at kernel.org
Thu Aug 13 18:53:02 PDT 2026
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] The exact NULL pointer dereference vulnerability fixed in `phy-rockchip-usbdp.c` exists in multiple other drivers which were overlooked in this patch.
- [High] Clock prepare/enable and reset assertion imbalance if probe fails when PHY is already in DP mode.
--
--- Patch [5]: [PATCH v14 05/38] phy: rockchip: usbdp: Handle missing clock-names DT property gracefully ---
commit 6c56ea962e4b5726f304742232f476db1aa9e0f2
Author: Sebastian Reichel <sebastian.reichel at collabora.com>
phy: rockchip: usbdp: Handle missing clock-names DT property gracefully
This commit fixes a null pointer dereference in the phy clock initialization
when a non-compliant device tree specifies clocks but no clock-names.
Fixes: 2f70bbddeb45 ("phy: rockchip: add usbdp combo phy driver")
Reported-by: Sashiko <sashiko-bot at kernel.org>
Closes: https://sashiko.dev/#/message/20260619154349.071321F000E9%40smtp.kernel.org
Tested-by: Igor Paunovic <royalnet026 at gmail.com> # Orange Pi 5 Plus
> diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> index 2845a012eafcc..3fc8222fcaec2 100644
> --- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
> +++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
> @@ -432,6 +432,9 @@ static int rk_udphy_clk_init(struct rk_udphy *udphy, struct device *dev)
>
> /* used for configure phy reference clock frequency */
> for (i = 0; i < udphy->num_clks; i++) {
> + if (!udphy->clks[i].id)
> + continue;
> +
[Severity: High]
This isn't a bug introduced by this patch, but since you are fixing the
missing clock-names property gracefully here, should similar fixes be
applied to other drivers that use devm_clk_bulk_get_all() and check the id?
The same null pointer dereference can occur in these locations if
clock-names is missing from the device tree:
drivers/phy/rockchip/phy-rockchip-inno-usb2.c:rockchip_usb2phy_clk480m_register()
if (!strncmp(rphy->clks[i].id, "phyclk", 6)) {
drivers/phy/rockchip/phy-rockchip-naneng-combphy.c:rockchip_combphy_parse_dt()
if (!strncmp(priv->clks[i].id, "ref", 3)) {
drivers/pci/controller/dwc/pci-imx6.c:imx_setup_phy_mpll()
if (strncmp(clks[i].id, "pcie_phy", 8) == 0)
drivers/pci/controller/dwc/pci-imx6.c:imx_pcie_probe()
if (strncmp(imx_pcie->clks[i].id, "extref", 6) == 0)
drivers/spi/spi-rzv2h-rspi.c:rspi_probe()
if (!strcmp(clks[i].id, rspi->info->tclk_name)) {
Could these drivers also crash on boot with a malformed device tree?
> if (!strncmp(udphy->clks[i].id, "refclk", 6)) {
> udphy->refclk = udphy->clks[i].clk;
> break;
[ ... ]
[Severity: High]
This is a pre-existing issue, but does probe failure lead to a resource
leak if the phy is already in dp mode?
If the phy is already active, rk_udphy_get_initial_status() prepares and
enables the clocks but intentionally skips rk_udphy_disable() to keep them
active:
drivers/phy/rockchip/phy-rockchip-usbdp.c:rk_udphy_get_initial_status() {
...
rk_udphy_disable(udphy);
}
If a subsequent step in probe fails, the function returns without cleaning
up those resources:
drivers/phy/rockchip/phy-rockchip-usbdp.c:rk_udphy_probe() {
ret = rk_udphy_get_initial_status(udphy);
if (ret)
return ret;
...
if (ret)
return ret;
}
Since devm_clk_bulk_get_all() only registers a devres action to call
clk_put(), wouldn't this permanently leak the enable counts and unasserted
resets on probe deferral?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260813-rockchip-usbdp-cleanup-v14-0-b5ad9c68fa11@collabora.com?part=5
More information about the linux-phy
mailing list