CVE-2026-31456Linux内核的mm/pagewalk组件中存在安全漏洞,涉及并发拆分和refault之间的竞态条件。在`walk_pud_range()`中拆分PUD条目时,可能与并发线程对PUD叶子条目的refault操作发生竞争,导致尝试遍历已消失的PMD范围,从而触发内核BUG和系统崩溃。
该漏洞发生在Linux内核的内存管理子系统。当VFIO-PCI设置DMA(特别是`vfio_pin_pages_remote`调用)时,若同时读取进程的numa_maps,会触发此竞态。`walk_pud_range()`在拆分PUD时未对PUD条目进行稳定性校验,导致在`walk_pgd_range`中访问无效地址(如`ffffa23980000000`),引发Oops。修复方案是在`walk_pmd_range()`中使用`pudp_get()`获取稳定快照,若PUD不存在或为叶子节点,则通过`ACTION_AGAIN`重试,而非继续向下遍历,以此同步`walk_pte_range()`的重试逻辑。