IPBUF安全漏洞报告
English
CVE-2025-71132 CVSS 5.5 中危

CVE-2025-71132: Linux内核smc91x驱动PREEMPT_RT下IRQ上下文泄漏漏洞

披露日期: 2026-01-14
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2025-71132
漏洞类型
内核驱动缺陷/资源泄漏
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel smc91x网络驱动

相关标签

Linux Kernelsmc91xPREEMPT_RTIRQ泄漏内核驱动workqueue资源泄漏本地提权

漏洞概述

CVE-2025-71132是Linux内核中smc91x网络驱动在PREEMPT_RT(实时抢占)配置下存在的IRQ上下文管理缺陷。该漏洞导致在禁用抢占的内核配置中,smc_special_trylock()函数会禁用中断(IRQs),但对应的smc_special_unlock()函数无法正确恢复中断状态,造成workqueue泄漏原子上下文。当系统运行在PREEMPT_RT模式下时,这种不匹配的锁操作会触发内核警告,导致系统稳定性问题,表现为workqueue泄漏atomic、lock或RCU资源的错误信息。该漏洞需要本地低权限用户触发,但无需用户交互即可造成可用性影响。

技术细节

漏洞根源在于smc91x.c驱动中的锁机制实现不当。在PREEMPT_RT配置下,smc_special_trylock()使用spin_lock_irqsave()或类似机制禁用本地中断,但smc_special_unlock()调用spin_unlock_irqrestore()时无法正确恢复中断状态。具体来说,smc_special_unlock()调用spin_unlock_irqrestore()后,rcu_read_unlock_bh()在__dev_queue_xmit()中无法通过__local_bh_enable_ip()正确调用rcu_read_unlock(),因为current->softirq_disable_cnt不会归零。内核workqueue检测到这种IRQ上下文泄漏后,会触发BUG警告并输出堆栈跟踪。修复方案是使用标准的spin_trylock_irqsave()替代自定义的smc_special_trylock(),确保锁获取和释放时的IRQ状态管理保持一致。

攻击链分析

STEP 1
1
攻击者获得目标系统的本地低权限访问权限
STEP 2
2
确认目标系统运行带有PREEMPT_RT配置的Linux内核,且smc91x驱动已加载
STEP 3
3
通过正常网络操作(如ping、SSH连接等)触发smc91x网络接口的数据包发送
STEP 4
4
smc91x驱动在数据包发送路径中调用smc_special_trylock()禁用IRQ,但smc_special_unlock()无法正确恢复
STEP 5
5
内核workqueue检测到IRQ上下文泄漏,触发BUG警告,导致系统可用性下降

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-71132 PoC - 触发smc91x IRQ上下文泄漏 // 条件:Linux Kernel with PREEMPT_RT enabled, smc91x driver loaded #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> /* Trigger conditions: * 1. Kernel compiled with CONFIG_PREEMPT_RT * 2. smc91x network driver loaded and active * 3. Network interface operational (link up) * 4. Trigger network traffic to invoke smc91x transmit path * * Expected result: BUG warning about workqueue leaked atomic context */ static int __init cve_2025_71132_init(void) { printk(KERN_INFO "CVE-2025-71132 PoC: smc91x RT lock issue\n"); /* The bug is triggered through normal network operations * when smc91x driver processes TX packets with PREEMPT_RT */ return 0; } static void __exit cve_2025_71132_exit(void) { printk(KERN_INFO "CVE-2025-71132 PoC unloaded\n"); } module_init(cve_2025_71132_init); module_exit(cve_2025_71132_exit); MODULE_LICENSE("GPL"); /* Mitigation: Apply kernel patch replacing smc_special_trylock() * with spin_trylock_irqsave() in smc91x.c * Commit: 1c4cb705e733250d13243f6a69b8b5a92e39b9f6 */

影响范围

Linux Kernel smc91x driver (PREEMPT_RT enabled)
FVP_RevC platform with smc91x ethernet interface

防御指南

临时缓解措施
在无法立即升级内核的情况下,可通过禁用PREEMPT_RT配置重新编译内核来避免该问题;或者如果系统不使用smc91x网络驱动,可以考虑禁用该驱动模块(modprobe -r smc91x或在内核配置中移除CONFIG_SMC91X)。最有效的缓解措施是应用官方发布的内核安全补丁。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表