From 9aa70b2b4672a466f9ca623f0d8fd4b4b0c06f7d Mon Sep 17 00:00:00 2001 From: zhangyuyang Date: Wed, 26 Aug 2026 14:19:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(netdev):=20=E4=BF=AE=E5=A4=8D=E6=97=A0?= =?UTF-8?q?=E7=BD=91=E5=8D=A1=E6=97=B6=20ping=20=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit netdev_cmd_ping 中 netdev 回退到 netdev_default 后未判空, QEMU 无网卡环境下执行 ping 直接解引用 NULL 崩溃(data abort)。 回退后增加空指针检查,提示无可用网卡并返回错误。 --- components/net/netdev/src/netdev.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/components/net/netdev/src/netdev.c b/components/net/netdev/src/netdev.c index 3b59522c156e..5a4056b97a7b 100644 --- a/components/net/netdev/src/netdev.c +++ b/components/net/netdev/src/netdev.c @@ -1340,6 +1340,11 @@ int netdev_cmd_ping(char* target_name, char *netdev_name, rt_uint32_t times, rt_ if (netdev == RT_NULL) { netdev = netdev_default; + if (netdev == RT_NULL) + { + rt_kprintf("ping: not found default netif, please specify netdev name.\n"); + return -RT_ERROR; + } rt_kprintf("ping: not found specified netif, using default netdev %s.\n", netdev->name); } @@ -1412,6 +1417,12 @@ int netdev_cmd_ping(char* target_name, char *netdev_name, rt_uint32_t times, rt_ rt_thread_delay(delay_tick); } + if (times == 0) + { + rt_kprintf("ping: send times is zero, no ping statistics.\n"); + return -RT_ERROR; + } + /* print ping statistics */ loss = (uint32_t)((1 - ((float)received) / index) * 100); avg_time = (uint32_t)(avg_time / received);