CVE-2026-31466CVE-2026-31466是Linux内核中mm/huge_memory模块的一个安全漏洞。该漏洞源于softleaf_to_folio()函数在处理迁移条目时缺少必要的内存屏障。在arm64服务器上,当mTHP(多级透明巨页)分裂与zap_nonpresent_ptes()操作发生并发时,由于缺乏smp_rmb(),可能导致内核读取到不一致的页状态。这会触发VM_WARN_ON_ONCE或BUG_ON断言,导致系统崩溃,造成拒绝服务。攻击者需具备本地低权限即可利用此漏洞。
该漏洞的核心在于Linux内核内存管理中的并发同步机制缺陷。在__split_folio_to_order()函数中,内核通过smp_wmb()确保尾页的标志位(如PG_locked)在页结构变更前对其他CPU可见。然而,softleaf_to_folio()在通过PFN获取folio时,并未使用配对的smp_rmb()读取屏障。具体攻击场景中,CPU0正在执行deferred_split_scan进行页分裂,CPU1同时执行zap_nonpresent_ptes。由于缺少读屏障,CPU1可能先看到compound_head的更新,却未看到PG_locked标志的设置。这导致函数误判folio未被锁定,从而在未持有锁的情况下访问或修改页结构,触发内核保护机制(如BUG_ON),导致系统Panic。这是一个典型的由内存序违规导致的本地拒绝服务漏洞。