From b57c80f06f640f951682cd29ed79910fe7f5f789 Mon Sep 17 00:00:00 2001 From: kaidegit <2857693944@qq.com> Date: Sun, 17 May 2026 10:52:51 +0800 Subject: [PATCH] [drivers][serial/v2] fix missing break after -RT_EPERM when buf size is 0 When rx_bufsz or tx_bufsz is 0, the driver returns -RT_EPERM but falls through to RT_ASSERT(rx_fifo/tx_fifo != RT_NULL). Since serial_rx/serial_tx is NULL in non-buffered mode, this triggers an assertion failure. Add break after setting ret = -RT_EPERM in the four affected cases: - RT_SERIAL_CTRL_SET_RX_TIMEOUT - RT_SERIAL_CTRL_SET_TX_TIMEOUT - RT_SERIAL_CTRL_GET_RX_TIMEOUT - RT_SERIAL_CTRL_GET_TX_TIMEOUT --- components/drivers/serial/dev_serial_v2.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/drivers/serial/dev_serial_v2.c b/components/drivers/serial/dev_serial_v2.c index 4f21494634..f3bb65da2c 100644 --- a/components/drivers/serial/dev_serial_v2.c +++ b/components/drivers/serial/dev_serial_v2.c @@ -1466,6 +1466,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev, if (serial->config.rx_bufsz == 0) { ret = -RT_EPERM; + break; } struct rt_serial_rx_fifo *rx_fifo = RT_NULL; @@ -1487,6 +1488,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev, if (serial->config.tx_bufsz == 0) { ret = -RT_EPERM; + break; } struct rt_serial_tx_fifo *tx_fifo = RT_NULL; @@ -1507,6 +1509,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev, if (serial->config.rx_bufsz == 0) { ret = -RT_EPERM; + break; } struct rt_serial_rx_fifo *rx_fifo = RT_NULL; @@ -1527,6 +1530,7 @@ static rt_err_t rt_serial_control(struct rt_device *dev, if (serial->config.tx_bufsz == 0) { ret = -RT_EPERM; + break; } struct rt_serial_tx_fifo *tx_fifo = RT_NULL;