From 24cab5eedba19cbec3419e52d426263f544a8cbe Mon Sep 17 00:00:00 2001 From: hanzhijian Date: Thu, 20 Aug 2026 19:29:49 +0800 Subject: [PATCH] [bsp][nuvoton] Clamp CAN receive DLC --- bsp/nuvoton/libraries/m2354/rtt_port/drv_can.c | 4 ++++ bsp/nuvoton/libraries/m480/rtt_port/drv_can.c | 4 ++++ bsp/nuvoton/libraries/n9h30/rtt_port/drv_can.c | 4 ++++ bsp/nuvoton/libraries/nuc980/rtt_port/drv_can.c | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/bsp/nuvoton/libraries/m2354/rtt_port/drv_can.c b/bsp/nuvoton/libraries/m2354/rtt_port/drv_can.c index 89236c329d35..4be31bb3b6b9 100644 --- a/bsp/nuvoton/libraries/m2354/rtt_port/drv_can.c +++ b/bsp/nuvoton/libraries/m2354/rtt_port/drv_can.c @@ -515,6 +515,10 @@ static int nu_can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t boxn pmsg->rtr = (tMsg.FrameType == CAN_DATA_FRAME) ? RT_CAN_DTR : RT_CAN_RTR; pmsg->id = tMsg.Id; pmsg->len = tMsg.DLC ; + if (pmsg->len > sizeof(tMsg.Data)) + { + pmsg->len = sizeof(tMsg.Data); + } if (pmsg->data && pmsg->len) rt_memcpy(pmsg->data, &tMsg.Data[0], pmsg->len); diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c index c35c4eb7012e..f72aab445af8 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c @@ -566,6 +566,10 @@ static int nu_can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t boxn pmsg->rtr = (tMsg.FrameType == CAN_DATA_FRAME) ? RT_CAN_DTR : RT_CAN_RTR; pmsg->id = tMsg.Id; pmsg->len = tMsg.DLC ; + if (pmsg->len > sizeof(tMsg.Data)) + { + pmsg->len = sizeof(tMsg.Data); + } if (pmsg->data && pmsg->len) rt_memcpy(pmsg->data, &tMsg.Data[0], pmsg->len); diff --git a/bsp/nuvoton/libraries/n9h30/rtt_port/drv_can.c b/bsp/nuvoton/libraries/n9h30/rtt_port/drv_can.c index 77281e482b85..a2aa38e95bc5 100644 --- a/bsp/nuvoton/libraries/n9h30/rtt_port/drv_can.c +++ b/bsp/nuvoton/libraries/n9h30/rtt_port/drv_can.c @@ -515,6 +515,10 @@ static int nu_can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t boxn pmsg->rtr = (tMsg.FrameType == CAN_DATA_FRAME) ? RT_CAN_DTR : RT_CAN_RTR; pmsg->id = tMsg.Id; pmsg->len = tMsg.DLC ; + if (pmsg->len > sizeof(tMsg.Data)) + { + pmsg->len = sizeof(tMsg.Data); + } if (pmsg->data && pmsg->len) rt_memcpy(pmsg->data, &tMsg.Data[0], pmsg->len); diff --git a/bsp/nuvoton/libraries/nuc980/rtt_port/drv_can.c b/bsp/nuvoton/libraries/nuc980/rtt_port/drv_can.c index 159e3df348c7..e9959eb42430 100644 --- a/bsp/nuvoton/libraries/nuc980/rtt_port/drv_can.c +++ b/bsp/nuvoton/libraries/nuc980/rtt_port/drv_can.c @@ -539,6 +539,10 @@ static int nu_can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t boxn pmsg->rtr = (tMsg.FrameType == CAN_DATA_FRAME) ? RT_CAN_DTR : RT_CAN_RTR; pmsg->id = tMsg.Id; pmsg->len = tMsg.DLC ; + if (pmsg->len > sizeof(tMsg.Data)) + { + pmsg->len = sizeof(tMsg.Data); + } if (pmsg->data && pmsg->len) rt_memcpy(pmsg->data, &tMsg.Data[0], pmsg->len);