From 4093a3b01db3e104df1ced21d6af66fbd9960f30 Mon Sep 17 00:00:00 2001 From: mlwang Date: Thu, 10 Jul 2025 21:33:24 +0800 Subject: [PATCH] fix(port/ehci): Fix the urb leak when there is no data in the control transmission --- port/ehci/usb_hc_ehci.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/port/ehci/usb_hc_ehci.c b/port/ehci/usb_hc_ehci.c index 7c314354..c6a72e0f 100644 --- a/port/ehci/usb_hc_ehci.c +++ b/port/ehci/usb_hc_ehci.c @@ -336,10 +336,8 @@ static struct ehci_qh_hw *ehci_control_urb_init(struct usbh_bus *bus, struct usb } qtd_setup = ehci_qtd_alloc(bus); - qtd_data = ehci_qtd_alloc(bus); qtd_status = ehci_qtd_alloc(bus); - - USB_ASSERT_MSG(qtd_setup && qtd_data && qtd_status, "ctrl qtd alloc failed"); + USB_ASSERT_MSG(qtd_setup && qtd_status, "ctrl qtd alloc failed"); ehci_qh_fill(qh, urb->hport->dev_addr, @@ -363,6 +361,9 @@ static struct ehci_qh_hw *ehci_control_urb_init(struct usbh_bus *bus, struct usb /* fill data qtd */ if (setup->wLength > 0) { + qtd_data = ehci_qtd_alloc(bus); + USB_ASSERT_MSG(qtd_data, "ctrl qtd alloc failed"); + if ((setup->bmRequestType & 0x80) == 0x80) { token = QTD_TOKEN_PID_IN; } else {