summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichele Bisogno <[email protected]>2026-04-26 09:43:17 +0200
committerMarek Vasut <[email protected]>2026-04-26 17:52:36 +0200
commit6602a93d39294cfc3c73073658da7ee26f167be5 (patch)
tree169e4f370b8e5b27a666301de55d14a7f1dd0c6c
parent9f61fd5b80a43ae20ba115e3a2933d47d720ab82 (diff)
usb: gadget: rcar: Fix gadget registration lifecycle in remove
The driver currently fails to unregister the USB gadget when the device is removed or the driver is unbound. This leads to dangling pointers in the UDC core and potential memory corruption. Add a call to usb_del_gadget_udc() in the remove path to ensure a clean teardown of the gadget interface. Reviewed-by: Marek Vasut <[email protected]> Signed-off-by: Michele Bisogno <[email protected]>
-rw-r--r--drivers/usb/gadget/rcar/common.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/gadget/rcar/common.c b/drivers/usb/gadget/rcar/common.c
index 2ba022a3f2c..d40d6736a54 100644
--- a/drivers/usb/gadget/rcar/common.c
+++ b/drivers/usb/gadget/rcar/common.c
@@ -447,8 +447,11 @@ err_clk:
static int usbhs_udc_otg_remove(struct udevice *dev)
{
struct usbhs_priv_otg_data *priv = dev_get_priv(dev);
+ struct usb_gadget *gadget;
usbhs_rcar3_power_ctrl(&priv->usbhs_priv, false);
+ gadget = usbhsg_get_gadget(&priv->usbhs_priv);
+ usb_del_gadget_udc(gadget);
usbhs_mod_remove(&priv->usbhs_priv);
usbhs_fifo_remove(&priv->usbhs_priv);
usbhs_pipe_remove(&priv->usbhs_priv);