]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
usb: musb: omap2430: fix device leak at unbind
authorJohan Hovold <johan@kernel.org>
Thu, 24 Jul 2025 09:19:09 +0000 (11:19 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Jul 2025 08:50:43 +0000 (10:50 +0200)
Make sure to drop the reference to the control device taken by
of_find_device_by_node() during probe when the driver is unbound.

Fixes: 8934d3e4d0e7 ("usb: musb: omap2430: Don't use omap_get_control_dev()")
Cc: stable@vger.kernel.org # 3.13
Cc: Roger Quadros <rogerq@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20250724091910.21092-5-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/musb/omap2430.c

index 2970967a4fd28b21bd612b0949d4d4ab4dd810fd..36f756f9b7f60377fcd07033ac26e55e4bafab27 100644 (file)
@@ -400,7 +400,7 @@ static int omap2430_probe(struct platform_device *pdev)
        ret = platform_device_add_resources(musb, pdev->resource, pdev->num_resources);
        if (ret) {
                dev_err(&pdev->dev, "failed to add resources\n");
-               goto err2;
+               goto err_put_control_otghs;
        }
 
        if (populate_irqs) {
@@ -413,7 +413,7 @@ static int omap2430_probe(struct platform_device *pdev)
                res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
                if (!res) {
                        ret = -EINVAL;
-                       goto err2;
+                       goto err_put_control_otghs;
                }
 
                musb_res[i].start = res->start;
@@ -441,14 +441,14 @@ static int omap2430_probe(struct platform_device *pdev)
                ret = platform_device_add_resources(musb, musb_res, i);
                if (ret) {
                        dev_err(&pdev->dev, "failed to add IRQ resources\n");
-                       goto err2;
+                       goto err_put_control_otghs;
                }
        }
 
        ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
        if (ret) {
                dev_err(&pdev->dev, "failed to add platform_data\n");
-               goto err2;
+               goto err_put_control_otghs;
        }
 
        pm_runtime_enable(glue->dev);
@@ -463,7 +463,9 @@ static int omap2430_probe(struct platform_device *pdev)
 
 err3:
        pm_runtime_disable(glue->dev);
-
+err_put_control_otghs:
+       if (!IS_ERR(glue->control_otghs))
+               put_device(glue->control_otghs);
 err2:
        platform_device_put(musb);
 
@@ -477,6 +479,8 @@ static void omap2430_remove(struct platform_device *pdev)
 
        platform_device_unregister(glue->musb);
        pm_runtime_disable(glue->dev);
+       if (!IS_ERR(glue->control_otghs))
+               put_device(glue->control_otghs);
 }
 
 #ifdef CONFIG_PM