CVE-2026-31780Linux内核中的wilc1000无线驱动程序存在一个堆缓冲区溢出漏洞。该漏洞源于SSID扫描缓冲区大小计算时的整数溢出。由于用于累加SSID长度的变量类型为u8,当累加多个SSID长度时会发生回绕,导致分配的堆内存远小于实际需要写入的数据量,进而引发内存破坏。
该漏洞位于Linux内核的 `wifi: wilc1000` 驱动模块中。在进行SSID扫描操作时,驱动程序使用一个 `u8` 类型的变量 `valuesize` 来累加所有待扫描SSID的总长度。根据定义,每个SSID最大长度为33字节(IEEE80211_MAX_SSID_LEN + 1),而常量 `WILC_MAX_NUM_PROBED_SSID` 为10。因此,当扫描10个最大长度的SSID时,总长度为330字节。由于 `u8` 类型最大只能表示255,330会溢出并回绕为74。随后,代码使用这个错误的 `valuesize`(74)调用 `kmalloc` 分配内存。然而,后续的 `memcpy` 操作却尝试写入全部330字节的数据。这导致向堆缓冲区写入了约256字节的额外数据,造成严重的堆缓冲区溢出。攻击者利用该漏洞可能导致内核崩溃(DoS)或通过覆盖关键内核数据结构实现本地权限提升。