On Tue, 28 Jun 2022 at 13:37, yee.lee via kasan-dev <kasan-dev@xxxxxxxxxxxxxxxx> wrote: > > From: Yee Lee <yee.lee@xxxxxxxxxxxx> > > 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. > > Suggested-by: Catalin Marinas <catalin.marinas@xxxxxxx> > Suggested-by: Marco Elver <elver@xxxxxxxxxx> > Signed-off-by: Yee Lee <yee.lee@xxxxxxxxxxxx> Reviewed-by: Marco Elver <elver@xxxxxxxxxx> Does this want a Fixes tag? > --- > mm/kfence/core.c | 18 +++++++++--------- > 1 file changed, 9 insertions(+), 9 deletions(-) > > diff --git a/mm/kfence/core.c b/mm/kfence/core.c > index 4e7cd4c8e687..32a4a75e820c 100644 > --- a/mm/kfence/core.c > +++ b/mm/kfence/core.c > @@ -600,14 +600,6 @@ static unsigned long kfence_init_pool(void) > 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; > } > > @@ -620,8 +612,16 @@ static bool __init kfence_init_pool_early(void) > > 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; > + } > > /* > * Only release unprotected pages, and do not try to go back and change > -- > 2.18.0