From d39d7e5c603e85d405fb05cdd6e6bf59e10ed605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Thu, 5 Dec 2024 11:29:55 +0100 Subject: [PATCH] usb: device_next: Fail enqueue on disabled endpoints MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Do not allow enqueuing buffers on endpoints that were not enabled. Doing so can lead to division by zero later on because the max packet size can be 0 in disabled endpoint configuration. Signed-off-by: Tomasz Moń --- drivers/usb/udc/udc_common.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/usb/udc/udc_common.c b/drivers/usb/udc/udc_common.c index 86f5a7f854a..bef3f657382 100644 --- a/drivers/usb/udc/udc_common.c +++ b/drivers/usb/udc/udc_common.c @@ -592,6 +592,11 @@ int udc_ep_enqueue(const struct device *dev, struct net_buf *const buf) goto ep_enqueue_error; } + if (!cfg->stat.enabled) { + ret = -ENODEV; + goto ep_enqueue_error; + } + LOG_DBG("Queue ep 0x%02x %p len %u", cfg->addr, buf, USB_EP_DIR_IS_IN(cfg->addr) ? buf->len : buf->size);