CVE-2026-14366 in Zephyr
摘要
由 VulDB • 2026-08-31
Silicon Labs SiWx917 WiFi 驱动程序的发送回调函数 siwx91x_send()(位于 drivers/wifi/siwx91x/siwx91x_wifi.c)释放了一个它并不拥有的网络数据包。在 Zephyr TX 路径中,net_pkt 由 L2/网络栈拥有;驱动程序仅借用该包以将帧字节复制到本地 net_buf 中。修复前,siwx91x_send() 在发送完成后会额外调用 net_pkt_unref(pkt) 处理由调用方拥有的数据包,从而过早地将其最后一个引用计数减至零并将其返回到共享的数据包池中。此代码路径默认编译启用(CONFIG_WIFI_SILABS_SIWX91X_NET_STACK_NATIVE)。
位于 subsys/net/l2/ethernet/ethernet.c 中的调用方 ethernet_send() 在驱动程序返回后仍继续使用该数据包:它读取 net_pkt_get_len(pkt),更新 TX 统计信息,然后执行其自身的 net_pkt_unref(pkt)。由于驱动程序已经释放了该数据包,这些操作构成了 Use-After-Free(释放后使用)读操作,随后是第二次 unref(即 Double Free/双重释放)。当并发网络活动在两次 unref 之间回收已释放的 slab 槽位时,后续的 unref 会递减另一个活跃数据包的引用计数并释放它,从而破坏由接收和发送路径共享的 net_pkt 池。
该缺陷可通过通过原生栈 SiWx917 WiFi 接口进行的普通传输来触发,同一 WiFi 网络上的相邻攻击者可以诱导传输(例如 ARP 或 ICMP echo reply、TCP handshake)以驱动此代码路径执行。主要可观察到的影响是可用性丧失(由于池损坏导致的发送挂起和崩溃),以及依赖于竞态条件的内核网络缓冲区池内存破坏。修复方案从 siwx91x_send() 中移除了错误的 net_pkt_unref(pkt);驱动程序接收路径中的 unref 操作不受影响,因为它正确地释放了由驱动程序自身分配的数据包。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.