CVE-2025-71078CVE-2025-71078是Linux内核中的一个高危本地拒绝服务漏洞,位于powerpc/64s架构的SLB(Segment Lookaside Buffer)处理模块。该漏洞由于在哈希MMU(Memory Management Unit)系统中,软件SLB预加载缓存与硬件SLB缓冲区之间的同步机制存在缺陷导致。当进程在多个CPU之间迁移且prev和next的mm_struct相同时,内核会跳过switch_mmu_context()调用以优化性能,但这会导致硬件SLB和软件预加载缓存不一致。如果SLB条目被从一个CPU的软件缓存中驱逐,而该进程稍后在另一个CPU上运行未执行上下文切换,硬件SLB可能保留过时条目。当内核尝试重新加载该条目时,会触发SLB多重命中错误,可能导致系统崩溃或本地拒绝服务。攻击者可通过本地低权限访问触发此漏洞,无需用户交互。
该漏洞的根本原因在于powerpc/64s架构的hash MMU系统中软件SLB预加载缓存与硬件SLB的同步问题。系统存在一个软件SLB预加载缓存,用于镜像硬件SLB缓冲区中的条目,该缓存每256次上下文切换会进行驱逐清理。内核为优化性能,在switch_mm_irqs_off()中当prev和next的mm_struct相同时跳过switch_mmu_context()调用。然而这导致以下问题:当某个CPU上的SLB条目被从软件缓存中驱逐后,如果该进程迁移到另一CPU运行且未执行switch_mmu_context(),硬件SLB会保留过时条目。后续在preload_new_slb_context()中尝试重新添加该条目时,会同时添加到软件缓存和硬件SLB,但由于该条目在原CPU上从未被失效,在硬件SLB中添加会导致SLB多重命中错误。攻击者可通过精心设计进程调度场景,在多核系统上触发进程跨CPU迁移且prev/next mm_struct相同的条件,从而触发此漏洞导致系统崩溃。