| From sashal@kernel.org Thu Aug 21 15:32:48 2025 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 21 Aug 2025 09:32:43 -0400 |
| Subject: usb: musb: omap2430: fix device leak at unbind |
| To: stable@vger.kernel.org |
| Cc: Johan Hovold <johan@kernel.org>, Roger Quadros <rogerq@kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sasha Levin <sashal@kernel.org> |
| Message-ID: <20250821133244.715359-2-sashal@kernel.org> |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| [ Upstream commit 1473e9e7679bd4f5a62d1abccae894fb86de280f ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/usb/musb/omap2430.c | 14 +++++++++----- |
| 1 file changed, 9 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/usb/musb/omap2430.c |
| +++ b/drivers/usb/musb/omap2430.c |
| @@ -400,7 +400,7 @@ static int omap2430_probe(struct platfor |
| 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 platfor |
| 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 platfor |
| 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 platfor |
| |
| 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 platf |
| |
| platform_device_unregister(glue->musb); |
| pm_runtime_disable(glue->dev); |
| + if (!IS_ERR(glue->control_otghs)) |
| + put_device(glue->control_otghs); |
| } |
| |
| #ifdef CONFIG_PM |