v1
2026-09-16
修复vmalloc_dump_obj查找 · v1
修正vmalloc_dump_obj()的PAGE_ALIGN导致的va_end越界,并跨vmap节点搜索大于64KiB的分配,同时提前过滤非vmalloc地址。
原始补丁链接
子 Patch(3)
1/3
mm/vmalloc: fix vmalloc_dump_obj address alignment for last-page lookups
PAGE_ALIGN() 向上取整会把末页地址推到 va_end,__find_vmap_area() 查不到而退化为 “vmalloc memory”,跨 vmap zone 边界时 addr_to_node() 还会选错节点;改用 PAGE_ALIGN_DOWN()。
2/3
mm/vmalloc: fix vmalloc_dump_obj cross-zone VA lookup
vmalloc_dump_obj() 只查 addr_to_node(addr) 一个节点,跨 zone 的大分配其 VA 只在 va_start 所在节点的 rb-tree,必然查不到;改为 for_each_vmap_node 遍历,因处于 OOM/KASAN 原子上下文用 spin_trylock。
3/3
mm/vmalloc: skip vmalloc_dump_obj for non-vmalloc addresses
mem_dump_obj() 在类型判断前就调用 vmalloc_dump_obj(),slab/栈等非 vmalloc 地址也会遍历所有 vmap 节点并 trylock;入口加 is_vmalloc_addr() 提前返回,同时覆盖 KASAN 路径。