CVE-2025-71080CVE-2025-71080是Linux内核中IPv6路由处理模块的一个中等严重性安全漏洞。该漏洞存在于rt6_get_pcpu_route()和rt6_make_pcpu_route()函数中,特别是在启用PREEMPT_RT(实时抢占)选项的内核上。由于这些函数之间存在竞争条件,当一个任务在rt6_get_pcpu_route()返回NULL后被抢占,另一个任务在同一CPU上成功安装pcpu_rt条目时,恢复执行的任务在执行cmpxchg()操作时会失败,从而触发内核的BUG_ON()断言。该漏洞可能导致系统崩溃(拒绝服务),影响系统的可用性。攻击者需要具有本地低权限即可触发此漏洞,无需用户交互。CVSS 3.1评分5.5(中等),主要影响可用性方面。
在Linux内核的IPv6路由子系统中,rt6_get_pcpu_route()函数负责获取per-CPU路由条目。当该函数返回NULL后,在PREEMPT_RT内核中,当前任务可能被高优先级任务抢占。此时,另一个任务可以在同一CPU上执行rt6_make_pcpu_route(),该函数使用cmpxchg()(比较并交换)原子指令来尝试安装新的pcpu_rt条目。由于使用了原子操作,第二个任务会成功将pcpu_rt安装到路由表中。当第一个任务恢复执行时,它尝试执行相同的cmpxchg()操作,但由于rt6i_pcpu已经不再为NULL(已被第二个任务设置),cmpxchg()会失败,导致BUG_ON(prev)被触发,使系统崩溃。使用preempt_disable/enable保护临界区不可行,因为ip6_rt_pcpu_alloc()函数可能会睡眠(分配内存)。正确的修复方案是在PREEMPT_RT内核上优雅处理cmpxchg()失败的情况:释放我们分配的内存,并返回另一个任务已安装的pcpu_rt。对于非PREEMPT_RT内核,将BUG_ON替换为WARN_ON_ONCE,因为在非实时内核中这种竞争条件不应该发生。