]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
phy: tegra: xusb: fix device and OF node leak at probe
authorJohan Hovold <johan@kernel.org>
Thu, 24 Jul 2025 13:12:04 +0000 (15:12 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Sep 2025 14:29:59 +0000 (16:29 +0200)
commit bca065733afd1e3a89a02f05ffe14e966cd5f78e upstream.

Make sure to drop the references taken to the PMC OF node and device by
of_parse_phandle() and of_find_device_by_node() during probe.

Note the holding a reference to the PMC device does not prevent the
PMC regmap from going away (e.g. if the PMC driver is unbound) so there
is no need to keep the reference.

Fixes: 2d1021487273 ("phy: tegra: xusb: Add wake/sleepwalk for Tegra210")
Cc: stable@vger.kernel.org # 5.14
Cc: JC Kuo <jckuo@nvidia.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20250724131206.2211-2-johan@kernel.org
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/phy/tegra/xusb-tegra210.c

index eedfc7c2cc05270f0be4598fe758af168bc0fc62..80d28aecdce418f41a610dc44c9b763f2266242f 100644 (file)
@@ -3165,18 +3165,22 @@ tegra210_xusb_padctl_probe(struct device *dev,
        }
 
        pdev = of_find_device_by_node(np);
+       of_node_put(np);
        if (!pdev) {
                dev_warn(dev, "PMC device is not available\n");
                goto out;
        }
 
-       if (!platform_get_drvdata(pdev))
+       if (!platform_get_drvdata(pdev)) {
+               put_device(&pdev->dev);
                return ERR_PTR(-EPROBE_DEFER);
+       }
 
        padctl->regmap = dev_get_regmap(&pdev->dev, "usb_sleepwalk");
        if (!padctl->regmap)
                dev_info(dev, "failed to find PMC regmap\n");
 
+       put_device(&pdev->dev);
 out:
        return &padctl->base;
 }