From 94ce24b0cebbe1733a4b702bfc0586749418c74e Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Thu, 22 Sep 2022 14:22:08 +0300 Subject: [PATCH] BACKPORT: usb: dwc3: core: fix some leaks in probe The dwc3_get_properties() function calls: dwc->usb_psy = power_supply_get_by_name(usb_psy_name); so there is some additional clean up required on these error paths. Bug: 254441685 Fixes: 6f0764b5adea ("usb: dwc3: add a power supply for current control") Signed-off-by: Dan Carpenter Link: https://lore.kernel.org/r/YyxFYFnP53j9sCg+@kili Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 2a735e4b5580a2a6bbd6572109b4c4f163c57462) Signed-off-by: Lee Jones Change-Id: Ic8833e7db878998bb88baaf6d396aa8dcfd4984f --- drivers/usb/dwc3/core.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 419e1aadc1ff..9c981ceb8511 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1574,13 +1574,17 @@ static int dwc3_probe(struct platform_device *pdev) dwc3_get_properties(dwc); dwc->reset = devm_reset_control_array_get_optional_shared(dev); - if (IS_ERR(dwc->reset)) - return PTR_ERR(dwc->reset); + if (IS_ERR(dwc->reset)) { + ret = PTR_ERR(dwc->reset); + goto put_usb_psy; + } if (dev->of_node) { ret = devm_clk_bulk_get_all(dev, &dwc->clks); - if (ret == -EPROBE_DEFER) - return ret; + if (ret == -EPROBE_DEFER) { + goto put_usb_psy; + } + /* * Clocks are optional, but new DT platforms should support all * clocks as required by the DT-binding. @@ -1589,12 +1593,11 @@ static int dwc3_probe(struct platform_device *pdev) dwc->num_clks = 0; else dwc->num_clks = ret; - } ret = reset_control_deassert(dwc->reset); if (ret) - return ret; + goto put_usb_psy; ret = clk_bulk_prepare_enable(dwc->num_clks, dwc->clks); if (ret) @@ -1694,7 +1697,7 @@ disable_clks: clk_bulk_disable_unprepare(dwc->num_clks, dwc->clks); assert_reset: reset_control_assert(dwc->reset); - +put_usb_psy: if (dwc->usb_psy) power_supply_put(dwc->usb_psy);