diff options
| author | kaidegit <[email protected]> | 2026-05-17 10:52:51 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2026-05-19 13:12:21 +0800 |
| commit | b57c80f06f640f951682cd29ed79910fe7f5f789 (patch) | |
| tree | cffef2710343649ecd961f9d63123070f802d225 | |
| parent | 4ec8373caaf2be9bf1dd67f7057bd7c0d58484de (diff) | |
[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
| -rw-r--r-- | components/drivers/serial/dev_serial_v2.c | 4 |
1 files changed, 4 insertions, 0 deletions
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; |
