mm: kmemleak: fix upper boundary check for physical address objects
commit488b5b9eca
upstream. Memblock allocations are registered by kmemleak separately, based on their physical address. During the scanning stage, it checks whether an object is within the min_low_pfn and max_low_pfn boundaries and ignores it otherwise. With the recent addition of __percpu pointer leak detection (commit6c99d4eb7c
("kmemleak: enable tracking for percpu pointers")), kmemleak started reporting leaks in setup_zone_pageset() and setup_per_cpu_pageset(). These were caused by the node_data[0] object (initialised in alloc_node_data()) ending on the PFN_PHYS(max_low_pfn) boundary. The non-strict upper boundary check introduced by commit84c3262991
("mm: kmemleak: check physical address when scan") causes the pg_data_t object to be ignored (not scanned) and the __percpu pointers it contains to be reported as leaks. Make the max_low_pfn upper boundary check strict when deciding whether to ignore a physical address object and not scan it. Link: https://lkml.kernel.org/r/20250127184233.2974311-1-catalin.marinas@arm.com Fixes:84c3262991
("mm: kmemleak: check physical address when scan") Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Reported-by: Jakub Kicinski <kuba@kernel.org> Tested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Cc: Patrick Wang <patrick.wang.shcn@gmail.com> Cc: <stable@vger.kernel.org> [6.0.x] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5d781d7b27
commit
ef23d987ee
|
@ -1549,7 +1549,7 @@ static void kmemleak_scan(void)
|
|||
unsigned long phys = object->pointer;
|
||||
|
||||
if (PHYS_PFN(phys) < min_low_pfn ||
|
||||
PHYS_PFN(phys + object->size) >= max_low_pfn)
|
||||
PHYS_PFN(phys + object->size) > max_low_pfn)
|
||||
__paint_it(object, KMEMLEAK_BLACK);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue