mm: kfence: apply kmemleak_ignore_phys on early allocated pool
This patch solves two issues.
(1) The pool allocated by memblock needs to unregister from
kmemleak scanning. Apply kmemleak_ignore_phys to replace the
original kmemleak_free as its address now is stored in the phys tree.
(2) The pool late allocated by page-alloc doesn't need to unregister.
Move out the freeing operation from its call path.
Link: https://lkml.kernel.org/r/20220628113714.7792-2-yee.lee@mediatek.com
Fixes: 0c24e06119
("mm: kmemleak: add rbtree and store physical address for objects allocated with PA")
Signed-off-by: Yee Lee <yee.lee@mediatek.com>
Suggested-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Suggested-by: Marco Elver <elver@google.com>
Reviewed-by: Marco Elver <elver@google.com>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
14c99d6594
commit
07313a2b29
|
@ -603,14 +603,6 @@ static unsigned long kfence_init_pool(void)
|
||||||
addr += 2 * PAGE_SIZE;
|
addr += 2 * PAGE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* The pool is live and will never be deallocated from this point on.
|
|
||||||
* Remove the pool object from the kmemleak object tree, as it would
|
|
||||||
* otherwise overlap with allocations returned by kfence_alloc(), which
|
|
||||||
* are registered with kmemleak through the slab post-alloc hook.
|
|
||||||
*/
|
|
||||||
kmemleak_free(__kfence_pool);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -623,8 +615,16 @@ static bool __init kfence_init_pool_early(void)
|
||||||
|
|
||||||
addr = kfence_init_pool();
|
addr = kfence_init_pool();
|
||||||
|
|
||||||
if (!addr)
|
if (!addr) {
|
||||||
|
/*
|
||||||
|
* The pool is live and will never be deallocated from this point on.
|
||||||
|
* Ignore the pool object from the kmemleak phys object tree, as it would
|
||||||
|
* otherwise overlap with allocations returned by kfence_alloc(), which
|
||||||
|
* are registered with kmemleak through the slab post-alloc hook.
|
||||||
|
*/
|
||||||
|
kmemleak_ignore_phys(__pa(__kfence_pool));
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only release unprotected pages, and do not try to go back and change
|
* Only release unprotected pages, and do not try to go back and change
|
||||||
|
|
Loading…
Reference in New Issue