Linux-PHY Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Felix Gu" <ustc.gu@gmail.com>
Cc: vkoul@kernel.org, neil.armstrong@linaro.org,
	wsa+renesas@sang-engineering.com, olteanv@gmail.com,
	linux-phy@lists.infradead.org
Subject: Re: [PATCH] phy: renesas: rcar-gen2: Fix double of_node_put on phy creation failure
Date: Mon, 03 Aug 2026 12:54:48 +0000	[thread overview]
Message-ID: <20260803125449.C685C1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260803-rcar-gen2-v1-1-9aa35c36d7d7@gmail.com>

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

Pre-existing issues:
- [High] The driver saves a device node pointer (`np`) in `channel->of_node` without acquiring a reference, leading to a potential dangling pointer.
- [High] Potential out-of-bounds array access when populating the `drv->channels` array due to a time-of-check to time-of-use (TOCTOU) race condition.
- [High] The probe function incorrectly returns success (0) when a child node has an out-of-bounds 'reg' property.
--

--- Patch [1]: [PATCH] phy: renesas: rcar-gen2: Fix double of_node_put on phy creation failure ---
commit 007ce311e8760f22502bbc2b270c02df1d8b9ee0
Author: Felix Gu <ustc.gu@gmail.com>

phy: renesas: rcar-gen2: Fix double of_node_put on phy creation failure

This commit removes a redundant of_node_put() in the error path of
devm_phy_create(). The loop uses for_each_child_of_node_scoped(), which
automatically handles releasing the device node reference on scope exit.

> diff --git a/drivers/phy/renesas/phy-rcar-gen2.c b/drivers/phy/renesas/phy-rcar-gen2.c
> index 6c671254c6258..5a272e25e051c 100644
> --- a/drivers/phy/renesas/phy-rcar-gen2.c
> +++ b/drivers/phy/renesas/phy-rcar-gen2.c
> @@ -405,7 +405,6 @@ static int rcar_gen2_phy_probe(struct platform_device *pdev)

[Severity: High]
This is a pre-existing issue, but does this loop in rcar_gen2_phy_probe()
have a potential out-of-bounds array access?

The driver allocates the channels array based on of_get_child_count():

    drv->num_channels = of_get_child_count(dev->of_node);
    drv->channels = devm_kcalloc(dev, drv->num_channels, ...);

Then it iterates over the child nodes:

    for_each_child_of_node_scoped(dev->of_node, np) {
        struct rcar_gen2_channel *channel = drv->channels + i;
        ...
        i++;
    }

If a child node is added concurrently to the device tree (e.g., via an
overlay) between the count and the loop, could i exceed the allocated size
of the array?

[Severity: High]
This is a pre-existing issue, but does this code save a device node pointer
without taking a reference?

Inside the same for_each_child_of_node_scoped() loop in
rcar_gen2_phy_probe():

    channel->of_node = np;

The iterator automatically drops the reference to np when advancing to the
next iteration or when the loop terminates. If the device tree overlay is
removed and the node is freed, could this result in a dangling pointer when
accessed later?

Should it use of_node_get() to increment the reference count?

[Severity: High]
This is a pre-existing issue, but can this error handling block return 0
instead of a proper error code?

When validating the "reg" property in rcar_gen2_phy_probe():

    error = of_property_read_u32(np, "reg", &channel_num);
    if (error || channel_num >= data->num_channels) {
        dev_err(dev, "Invalid \"reg\" property\n");
        return error;
    }

If of_property_read_u32() succeeds, error is set to 0. If the channel_num is
subsequently found to be out of bounds, the condition evaluates to true.

Would returning error here falsely signal to the driver core that the probe
succeeded?

>  						   data->gen2_phy_ops);
>  			if (IS_ERR(phy->phy)) {
>  				dev_err(dev, "Failed to create PHY\n");
> -				of_node_put(np);
>  				return PTR_ERR(phy->phy);
>  			}
>  			phy_set_drvdata(phy->phy, phy);

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260803-rcar-gen2-v1-1-9aa35c36d7d7@gmail.com?part=1

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

  reply	other threads:[~2026-08-03 12:54 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-03 12:43 [PATCH] phy: renesas: rcar-gen2: Fix double of_node_put on phy creation failure Felix Gu
2026-08-03 12:54 ` sashiko-bot [this message]
2026-08-03 13:09 ` Krzysztof Kozlowski
2026-08-03 13:21 ` Biju Das
2026-08-06 16:26 ` Vinod Koul

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=20260803125449.C685C1F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=neil.armstrong@linaro.org \
    --cc=olteanv@gmail.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=ustc.gu@gmail.com \
    --cc=vkoul@kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox