Linux-PHY Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Geert Uytterhoeven" <geert+renesas@glider.be>
Cc: linux-clk@vger.kernel.org, neil.armstrong@linaro.org,
	olteanv@gmail.com, vkoul@kernel.org,
	linux-phy@lists.infradead.org
Subject: Re: [PATCH 2/2] phy: rockchip: Make sure clk_init_data is fully initialized
Date: Fri, 21 Aug 2026 10:29:36 +0000	[thread overview]
Message-ID: <20260821102936.F2AEE1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <adb5bd47343dd31661748d5de14cb28a2bae2d17.1787240165.git.geert+renesas@glider.be>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

Pre-existing issues:
- [High] Incorrect validation of the `refclk` pointer results in registering a clock with 1 parent but a NULL parent name if the optional 'phyclk' is missing.
- [High] Missing `of_clk_del_provider` on the error path of `inno_hdmi_phy_probe`, leading to a use-after-free in the OF clock provider list.
--

--- Patch [2]: [PATCH 2/2] phy: rockchip: Make sure clk_init_data is fully initialized ---
commit 830443ad1b9c48211b68c5bb691a7101b0e76d09
Author: Geert Uytterhoeven <geert+renesas@glider.be>

phy: rockchip: Make sure clk_init_data is fully initialized

This commit zero-initializes the clk_init_data structures across several
rockchip phy drivers to ensure all mutually-exclusive members are cleared.
This prevents subtle bugs when specific initialization configurations are
enabled.

> diff --git a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
> index 1483907413faa..80aeed965c3f3 100644
> --- a/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
> +++ b/drivers/phy/rockchip/phy-rockchip-inno-hdmi.c
> @@ -999,7 +999,7 @@ static int inno_hdmi_phy_clk_register(struct inno_hdmi_phy *inno)
>  {
>  	struct device *dev = inno->dev;
>  	struct device_node *np = dev->of_node;
> -	struct clk_init_data init;
> +	struct clk_init_data init = {};
>  	const char *parent_name;
>  	int ret;

[Severity: High]
This isn't a bug introduced by this patch, but does the clock provider
registration here leak on the probe error path?

In inno_hdmi_phy_probe(), if devm_of_phy_provider_register() fails after
the clock is registered:

inno_hdmi_phy_probe() {
    ...
    ret = inno_hdmi_phy_clk_register(inno);
        // Calls of_clk_add_provider() which adds to global list
    ...
    phy_provider = devm_of_phy_provider_register(...);
    return PTR_ERR_OR_ZERO(phy_provider);
}

If the phy provider registration fails, the probe aborts without calling
of_clk_del_provider(). Devres will free inno->phyclk, leaving a dangling
pointer in the global of_clk_providers list which could trigger a
use-after-free during subsequent clock lookups.

> diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> index 7d8a533f24aea..e47b89015586f 100644
> --- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> +++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
> @@ -400,7 +400,7 @@ static int
>  rockchip_usb2phy_clk480m_register(struct rockchip_usb2phy *rphy)
>  {
>  	struct device_node *node = rphy->dev->of_node;
> -	struct clk_init_data init;
> +	struct clk_init_data init = {};
>  	struct clk *refclk = NULL;
>  	const char *clk_name;
>  	int i;

[Severity: High]
This is a pre-existing issue, but does this function correctly handle
missing optional clocks later in the logic?

If the optional phyclk is not found, refclk remains NULL. However, the
validation check further down evaluates NULL as true:

rockchip_usb2phy_clk480m_register() {
    ...
    if (!IS_ERR(refclk)) {
        clk_name = __clk_get_name(refclk);
        init.parent_names = &clk_name;
        init.num_parents = 1;
    } else {
        ...
    }
}

Since !IS_ERR(NULL) is true, it attempts to register the clock with 1 parent
and a NULL parent name, causing clk_register() to fail with -EINVAL and
breaking USB PHY support on platforms missing this clock.

[ ... ]

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1787240165.git.geert+renesas@glider.be?part=2

-- 
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy

      reply	other threads:[~2026-08-21 10:29 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-21 10:08 [PATCH 0/2] phy: Make sure clk_init_data is fully initialized Geert Uytterhoeven
2026-08-21 10:08 ` [PATCH 1/2] phy: freescale: fsl-samsung-hdmi: " Geert Uytterhoeven
2026-08-21 10:19   ` sashiko-bot
2026-08-21 10:08 ` [PATCH 2/2] phy: rockchip: " Geert Uytterhoeven
2026-08-21 10:29   ` sashiko-bot [this message]

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=20260821102936.F2AEE1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=geert+renesas@glider.be \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=neil.armstrong@linaro.org \
    --cc=olteanv@gmail.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=vkoul@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