CVE-2026-31398Linux内核内存管理子系统中存在一个高危漏洞,具体位于反向映射(rmap)模块。该漏洞源于在批量取消映射匿名lazyfree folio时,未能正确区分可写和不可写的页表项(PTE)。当处理包含混合权限的PTE批次时,系统可能会错误地将整个批次设置为可写状态。此外,在PTE恢复过程中,soft-dirty位也未被正确保留。该缺陷违反了写时复制(CoW)的内存语义,可能导致内核崩溃(Oops),或在特定条件下被利用于权限提升,允许非特权用户破坏内核内存完整性。
漏洞发生在 `mm/rmap.c` 的 `folio_unmap_pte_batch` 函数中。在处理 `MADV_FREE` 标记的lazyfree大页时,如果批次中混合了可写(writable)和不可写(read-only)的PTE,当前的逻辑会错误地将整个批次视为可写进行恢复。这导致在内存回收路径中,一个可写的匿名页被映射到了多个进程的页表中,触发了 `page_table_check_set` 中的 `BUG_ON(atomic_inc_return(&ptc->anon_map_count) > 1 && rw)` 断言失败。攻击者可以通过特定的内存操作序列(如设置mTHP、分割VMA、fork、合并VMA并触发回收)来触发此路径,从而造成系统崩溃或潜在的越权读写。