summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <[email protected]>2023-04-29 20:50:21 +0800
committerMan, Jianting (Meco) <[email protected]>2023-04-29 18:16:10 -0400
commit613e5a3e516154c69349619c820a7e895fe73332 (patch)
treeee90449af2e2448cf692970beb8c1b1c1aec3fc0
parent8d526a72b4973769742a311cdfb5cb4408591883 (diff)
[HUST CSE]fix:修改drv_spi.c空指针问题
-rw-r--r--bsp/at32/libraries/rt_drivers/drv_spi.c11
-rw-r--r--bsp/hc32/libraries/hc32_drivers/drv_spi.c12
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_spi.c13
-rw-r--r--bsp/wch/risc-v/Libraries/ch32_drivers/drv_spi.c11
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)