From: Ye Liu vmalloc_dump_obj() unconditionally searches all vmap nodes even when called with a non-vmalloc address (e.g. a slab or stack pointer from mem_dump_obj()). Add an is_vmalloc_or_module_addr() check at the entry to avoid the unnecessary per-node trylock and rb-tree traversal. Use is_vmalloc_or_module_addr() rather than is_vmalloc_addr() because module, BPF, and execmem allocations reside in MODULES_VADDR..MODULES_END on x86_64, arm64, and riscv -- outside VMALLOC_START..VMALLOC_END -- but are still tracked in the same vmap_nodes rb-tree. Signed-off-by: Ye Liu --- mm/vmalloc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 30c610f678dc..d8095b558365 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -5277,6 +5277,9 @@ bool vmalloc_dump_obj(void *object) unsigned long addr; unsigned long nr_pages; + if (!is_vmalloc_or_module_addr(object)) + return false; + addr = PAGE_ALIGN_DOWN((unsigned long) object); /* -- 2.25.1