From 10180ab4eb0a4e2ef55edf0df7704f1cd6b72112 Mon Sep 17 00:00:00 2001 From: yangsong8 Date: Thu, 21 Aug 2025 10:36:36 +0800 Subject: [PATCH] drivers/usb: use lock to protect reqbuf when cdcacm unbind When CONFIG_CDCACM_DISABLE_TXBUF is enabled, if the USB is unplugged during serial data transmission, it is possible that cdcacm will enter the unbind process, and reqbuf will be released, causing a crash during serial write. Signed-off-by: yangsong8 --- drivers/usbdev/cdcacm.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/usbdev/cdcacm.c b/drivers/usbdev/cdcacm.c index 73c7bc03be7..2858ee19ef2 100644 --- a/drivers/usbdev/cdcacm.c +++ b/drivers/usbdev/cdcacm.c @@ -1497,6 +1497,10 @@ static void cdcacm_unbind(FAR struct usbdevclass_driver_s *driver, * of them) */ +#ifdef CONFIG_CDCACM_DISABLE_TXBUF + nxmutex_lock(&priv->serdev.xmit.lock); +#endif + flags = spin_lock_irqsave(&priv->lock); #ifdef CONFIG_CDCACM_DISABLE_TXBUF @@ -1524,6 +1528,10 @@ static void cdcacm_unbind(FAR struct usbdevclass_driver_s *driver, DEBUGASSERT(priv->nwrq == 0); spin_unlock_irqrestore(&priv->lock, flags); +#ifdef CONFIG_CDCACM_DISABLE_TXBUF + nxmutex_unlock(&priv->serdev.xmit.lock); +#endif + #ifdef CONFIG_CDCACM_HAVE_EPINTIN /* Free the interrupt IN endpoint */