CVE-2025-71132CVE-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状态管理保持一致。