diff options
| author | nobody <[email protected]> | 2023-04-29 20:50:21 +0800 |
|---|---|---|
| committer | Man, Jianting (Meco) <[email protected]> | 2023-04-29 18:16:10 -0400 |
| commit | 613e5a3e516154c69349619c820a7e895fe73332 (patch) | |
| tree | ee90449af2e2448cf692970beb8c1b1c1aec3fc0 | |
| parent | 8d526a72b4973769742a311cdfb5cb4408591883 (diff) | |
[HUST CSE]fix:修改drv_spi.c空指针问题
| -rw-r--r-- | bsp/at32/libraries/rt_drivers/drv_spi.c | 11 | ||||
| -rw-r--r-- | bsp/hc32/libraries/hc32_drivers/drv_spi.c | 12 | ||||
| -rw-r--r-- | bsp/stm32/libraries/HAL_Drivers/drv_spi.c | 13 | ||||
| -rw-r--r-- | bsp/wch/risc-v/Libraries/ch32_drivers/drv_spi.c | 11 |
4 files changed, 38 insertions, 9 deletions
diff --git a/bsp/at32/libraries/rt_drivers/drv_spi.c b/bsp/at32/libraries/rt_drivers/drv_spi.c index 98b0cf388e..a3a8deec54 100644 --- a/bsp/at32/libraries/rt_drivers/drv_spi.c +++ b/bsp/at32/libraries/rt_drivers/drv_spi.c @@ -393,8 +393,15 @@ static rt_ssize_t xfer(struct rt_spi_device* device, struct rt_spi_message* mess /* calculate the start address */ already_send_length = message->length - send_length - message_length; - send_buf = (rt_uint8_t *)message->send_buf + already_send_length; - recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + /* avoid null pointer problems */ + if (message->send_buf) + { + send_buf = (rt_uint8_t *)message->send_buf + already_send_length; + } + if (message->recv_buf) + { + recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + } /* start once data exchange in dma mode */ if (message->send_buf && message->recv_buf) diff --git a/bsp/hc32/libraries/hc32_drivers/drv_spi.c b/bsp/hc32/libraries/hc32_drivers/drv_spi.c index a24d932065..370224b17d 100644 --- a/bsp/hc32/libraries/hc32_drivers/drv_spi.c +++ b/bsp/hc32/libraries/hc32_drivers/drv_spi.c @@ -441,8 +441,16 @@ static rt_uint32_t hc32_spi_xfer(struct rt_spi_device *device, struct rt_spi_mes /* calculate the start address */ already_send_length = message->length - send_length - message_length; - send_buf = (rt_uint8_t *)message->send_buf + already_send_length; - recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + /* avoid null pointer problems */ + if (message->send_buf) + { + send_buf = (rt_uint8_t *)message->send_buf + already_send_length; + } + if (message->recv_buf) + { + recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + } + if (message->send_buf && message->recv_buf) { if ((spi_drv->spi_dma_flag & RT_DEVICE_FLAG_DMA_TX) && (spi_drv->spi_dma_flag & RT_DEVICE_FLAG_DMA_RX)) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_spi.c b/bsp/stm32/libraries/HAL_Drivers/drv_spi.c index 593c2f6022..24765769c1 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_spi.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_spi.c @@ -329,9 +329,16 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m /* calculate the start address */ already_send_length = message->length - send_length - message_length; - send_buf = (rt_uint8_t *)message->send_buf + already_send_length; - recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; - + /* avoid null pointer problems */ + if (message->send_buf) + { + send_buf = (rt_uint8_t *)message->send_buf + already_send_length; + } + if (message->recv_buf) + { + recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + } + #if defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32F7) rt_uint32_t* dma_buf = RT_NULL; if ((spi_drv->spi_dma_flag & SPI_USING_TX_DMA_FLAG) && (spi_drv->spi_dma_flag & SPI_USING_RX_DMA_FLAG)) diff --git a/bsp/wch/risc-v/Libraries/ch32_drivers/drv_spi.c b/bsp/wch/risc-v/Libraries/ch32_drivers/drv_spi.c index 22a078b8f5..ca439feccd 100644 --- a/bsp/wch/risc-v/Libraries/ch32_drivers/drv_spi.c +++ b/bsp/wch/risc-v/Libraries/ch32_drivers/drv_spi.c @@ -410,8 +410,15 @@ static rt_ssize_t spi_xfer(struct rt_spi_device *device, struct rt_spi_message * /* calculate the start address */ already_send_length = message->length - send_length - message_length; - send_buf = (rt_uint8_t *)message->send_buf + already_send_length; - recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + /* avoid null pointer problems */ + if (message->send_buf) + { + send_buf = (rt_uint8_t *)message->send_buf + already_send_length; + } + if (message->recv_buf) + { + recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + } /* start once data exchange */ if (message->send_buf && message->recv_buf) |
