v2
2026-08-26
x86 PAT CPA多个修复 · v2
CPA 修复系列:前三项紧急,第三项修 BUG(),解决大映射分裂/折叠竞争及 CPA/ptdump 的 UAF。
原始补丁链接
子 Patch(5)
1/5
x86/mm/pat: acquire init_mm write lock on collapse to avoid UAF
CPA collapse大页释放页表时无锁保护,ptdump等并发遍历可致UAF,因此在cpa_collapse_large_pages()路径获取init_mm写锁以排除并发walkers。
2/5
x86/mm/pat: acquire init_mm read lock on attribute change to avoid UAF
在__change_page_attr_set_clr()期间获取init_mm读锁,防止CPA属性修改中lockless PTE查找与set_pte_atomic()之间被并发collapse释放PTE导致UAF。
3/5
x86/alternative: exclude text poking against change_page_attr()
修复模块加载时static_call/text_poke与change_page_attr()并发导致的BUG_ON,通过排除机制避免text poking与CPA操作竞争。
4/5
x86/mm/pat: allocate split page tables as kernel page tables
__split_large_page()直接分配PTE未走pte_alloc_one_kernel(),缺少页表构造/内核页表标记,导致释放时无IOTLB invalidation,改为标准内核页表分配。
5/5
x86/mm/pat: fix effective RW computation in lookup_address_in_pgd_attr()
修复lookup_address_in_pgd_attr()中rw累积错误:_PAGE_RW为0x2,与rw=0x1按位与恒0,导致verify_rwx()漏报W^X,改用!!归一化。