Skip to content

Commit 613e5a3

Browse files
qwegzmysterywolf
authored andcommitted
[HUST CSE]fix:修改drv_spi.c空指针问题
1 parent 8d526a7 commit 613e5a3

File tree

4 files changed

+38
-9
lines changed

4 files changed

+38
-9
lines changed

bsp/at32/libraries/rt_drivers/drv_spi.c

+9-2
Original file line numberDiff line numberDiff line change
@@ -393,8 +393,15 @@ static rt_ssize_t xfer(struct rt_spi_device* device, struct rt_spi_message* mess
393393

394394
/* calculate the start address */
395395
already_send_length = message->length - send_length - message_length;
396-
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
397-
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
396+
/* avoid null pointer problems */
397+
if (message->send_buf)
398+
{
399+
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
400+
}
401+
if (message->recv_buf)
402+
{
403+
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
404+
}
398405

399406
/* start once data exchange in dma mode */
400407
if (message->send_buf && message->recv_buf)

bsp/hc32/libraries/hc32_drivers/drv_spi.c

+10-2
Original file line numberDiff line numberDiff line change
@@ -441,8 +441,16 @@ static rt_uint32_t hc32_spi_xfer(struct rt_spi_device *device, struct rt_spi_mes
441441

442442
/* calculate the start address */
443443
already_send_length = message->length - send_length - message_length;
444-
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
445-
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
444+
/* avoid null pointer problems */
445+
if (message->send_buf)
446+
{
447+
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
448+
}
449+
if (message->recv_buf)
450+
{
451+
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
452+
}
453+
446454
if (message->send_buf && message->recv_buf)
447455
{
448456
if ((spi_drv->spi_dma_flag & RT_DEVICE_FLAG_DMA_TX) && (spi_drv->spi_dma_flag & RT_DEVICE_FLAG_DMA_RX))

bsp/stm32/libraries/HAL_Drivers/drv_spi.c

+10-3
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,16 @@ static rt_ssize_t spixfer(struct rt_spi_device *device, struct rt_spi_message *m
329329

330330
/* calculate the start address */
331331
already_send_length = message->length - send_length - message_length;
332-
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
333-
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
334-
332+
/* avoid null pointer problems */
333+
if (message->send_buf)
334+
{
335+
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
336+
}
337+
if (message->recv_buf)
338+
{
339+
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
340+
}
341+
335342
#if defined(SOC_SERIES_STM32H7) || defined(SOC_SERIES_STM32F7)
336343
rt_uint32_t* dma_buf = RT_NULL;
337344
if ((spi_drv->spi_dma_flag & SPI_USING_TX_DMA_FLAG) && (spi_drv->spi_dma_flag & SPI_USING_RX_DMA_FLAG))

bsp/wch/risc-v/Libraries/ch32_drivers/drv_spi.c

+9-2
Original file line numberDiff line numberDiff line change
@@ -410,8 +410,15 @@ static rt_ssize_t spi_xfer(struct rt_spi_device *device, struct rt_spi_message *
410410

411411
/* calculate the start address */
412412
already_send_length = message->length - send_length - message_length;
413-
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
414-
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
413+
/* avoid null pointer problems */
414+
if (message->send_buf)
415+
{
416+
send_buf = (rt_uint8_t *)message->send_buf + already_send_length;
417+
}
418+
if (message->recv_buf)
419+
{
420+
recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length;
421+
}
415422

416423
/* start once data exchange */
417424
if (message->send_buf && message->recv_buf)

0 commit comments

Comments
 (0)