USB: lpc32xx_udc: Fix error handling in probe

lpc32xx_udc_probe() acquires an i2c_client reference through
isp1301_get_client() but fails to release it in both error handling
paths and the normal removal path. This could result in a reference
count leak for the I2C device, preventing proper cleanup and potentially
leading to resource exhaustion. Add put_device() to release the
reference in the probe failure path and in the remove function.

Calling path: isp1301_get_client() -> of_find_i2c_device_by_node() ->
i2c_find_device_by_fwnode(). As comments of i2c_find_device_by_fwnode()
says, 'The user must call put_device(&client->dev) once done with the
i2c client.'

Found by code review.

Cc: stable <stable@kernel.org>
Fixes: 24a28e428351 ("USB: gadget driver for LPC32xx")
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
Link: https://patch.msgid.link/20251215020931.15324-1-make24@iscas.ac.cn
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by Ma Ke and committed by Greg Kroah-Hartman c8411791 128bb7fa

Changed files
+15 -6
drivers
usb
gadget
+15 -6
drivers/usb/gadget/udc/lpc32xx_udc.c
··· 3020 3020 pdev->dev.dma_mask = &lpc32xx_usbd_dmamask; 3021 3021 retval = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); 3022 3022 if (retval) 3023 - return retval; 3023 + goto i2c_fail; 3024 3024 3025 3025 udc->board = &lpc32xx_usbddata; 3026 3026 ··· 3038 3038 /* Get IRQs */ 3039 3039 for (i = 0; i < 4; i++) { 3040 3040 udc->udp_irq[i] = platform_get_irq(pdev, i); 3041 - if (udc->udp_irq[i] < 0) 3042 - return udc->udp_irq[i]; 3041 + if (udc->udp_irq[i] < 0) { 3042 + retval = udc->udp_irq[i]; 3043 + goto i2c_fail; 3044 + } 3043 3045 } 3044 3046 3045 3047 udc->udp_baseaddr = devm_platform_ioremap_resource(pdev, 0); 3046 3048 if (IS_ERR(udc->udp_baseaddr)) { 3047 3049 dev_err(udc->dev, "IO map failure\n"); 3048 - return PTR_ERR(udc->udp_baseaddr); 3050 + retval = PTR_ERR(udc->udp_baseaddr); 3051 + goto i2c_fail; 3049 3052 } 3050 3053 3051 3054 /* Get USB device clock */ 3052 3055 udc->usb_slv_clk = devm_clk_get(&pdev->dev, NULL); 3053 3056 if (IS_ERR(udc->usb_slv_clk)) { 3054 3057 dev_err(udc->dev, "failed to acquire USB device clock\n"); 3055 - return PTR_ERR(udc->usb_slv_clk); 3058 + retval = PTR_ERR(udc->usb_slv_clk); 3059 + goto i2c_fail; 3056 3060 } 3057 3061 3058 3062 /* Enable USB device clock */ 3059 3063 retval = clk_prepare_enable(udc->usb_slv_clk); 3060 3064 if (retval < 0) { 3061 3065 dev_err(udc->dev, "failed to start USB device clock\n"); 3062 - return retval; 3066 + goto i2c_fail; 3063 3067 } 3064 3068 3065 3069 /* Setup deferred workqueue data */ ··· 3165 3161 dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE, 3166 3162 udc->udca_v_base, udc->udca_p_base); 3167 3163 i2c_fail: 3164 + if (udc->isp1301_i2c_client) 3165 + put_device(&udc->isp1301_i2c_client->dev); 3168 3166 clk_disable_unprepare(udc->usb_slv_clk); 3169 3167 dev_err(udc->dev, "%s probe failed, %d\n", driver_name, retval); 3170 3168 ··· 3194 3188 dma_pool_destroy(udc->dd_cache); 3195 3189 dma_free_coherent(&pdev->dev, UDCA_BUFF_SIZE, 3196 3190 udc->udca_v_base, udc->udca_p_base); 3191 + 3192 + if (udc->isp1301_i2c_client) 3193 + put_device(&udc->isp1301_i2c_client->dev); 3197 3194 3198 3195 clk_disable_unprepare(udc->usb_slv_clk); 3199 3196 }