CVE-2025-39956CVE-2025-39956是Linux内核中igc(Intel Gigabit Ethernet)网卡驱动的一个高可用性影响漏洞。当igc_probe()函数在LED初始化阶段(igc_led_setup())失败时,整个探测过程会被中止并触发内核崩溃(kernel panic),具体表现为free_netdev()中触发了kernel BUG。问题根源在于,当LED设置失败时,igc_probe()直接返回错误码,但此时unregister_netdev()尚未被调用,导致在释放网络设备时出现不合法操作。该漏洞可通过内核fault-injection框架中的failslab特性进行复现。由于LED支持并非网卡的核心功能,属于可选特性,因此该失败不应被视为致命错误。修复方案是将LED初始化失败视为非致命错误,仅输出警告信息后继续执行探测流程,从而避免内核崩溃。此漏洞的CVSS评分为5.5,属于中危级别,需要本地低权限访问即可触发,主要影响系统可用性,不涉及机密性泄露或完整性破坏。
该漏洞位于Linux内核的igc网卡驱动中,具体在igc_probe()函数的LED初始化流程中。技术原理如下:
1. **触发条件**:当igc_led_setup()函数执行失败(例如内存分配失败),igc_probe()会直接返回错误码。
2. **崩溃路径**:由于probe失败时网络设备已经通过alloc_netdev()分配但尚未通过register_netdev()注册,错误处理路径中缺少对unregister_netdev()的调用。当probe返回错误后,内核调用free_netdev()释放网络设备,在net/core/dev.c的12047行触发kernel BUG(invalid opcode),因为释放了一个已分配但状态不一致的网络设备。
3. **利用方式**:攻击者可通过内核fault-injection框架的failslab特性,对igc_led_setup()函数的内存分配进行注入失败。具体方法是通过/proc/kallsyms获取igc_led_setup的地址范围,设置failslab的require-start和require-end参数覆盖该地址范围,然后通过/sys/bus/pci/drivers/igc/bind触发设备绑定,强制LED初始化阶段内存分配失败。
4. **影响范围**:该漏洞需要本地低权限访问(PR:L),无需用户交互(UI:N),攻击复杂度低(AC:L),主要造成系统可用性丧失(系统崩溃/重启)。