The patch titled Subject: mm/slab.c: kmemleak no scan alien caches has been added to the -mm tree. Its filename is slab-kmemleak-no-scan-alien-caches.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/slab-kmemleak-no-scan-alien-caches.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/slab-kmemleak-no-scan-alien-caches.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Qian Cai <cai@xxxxxx> Subject: mm/slab.c: kmemleak no scan alien caches Kmemleak throws endless warnings during boot due to in __alloc_alien_cache(), alc = kmalloc_node(memsize, gfp, node); init_arraycache(&alc->ac, entries, batch); kmemleak_no_scan(ac); Kmemleak does not track the array cache (alc->ac) but the alien cache (alc) instead, so let it track the later by lifting kmemleak_no_scan() out of init_arraycache(). There is another place that calls init_arraycache(), but alloc_kmem_cache_cpus() uses the percpu allocation where will never be considered as a leak. [ 32.258841] kmemleak: Found object by alias at 0xffff8007b9aa7e38 [ 32.258847] CPU: 190 PID: 1 Comm: swapper/0 Not tainted 5.0.0-rc2+ #2 [ 32.258851] Call trace: [ 32.258858] dump_backtrace+0x0/0x168 [ 32.258863] show_stack+0x24/0x30 [ 32.258868] dump_stack+0x88/0xb0 [ 32.258873] lookup_object+0x84/0xac [ 32.258877] find_and_get_object+0x84/0xe4 [ 32.258882] kmemleak_no_scan+0x74/0xf4 [ 32.258887] setup_kmem_cache_node+0x2b4/0x35c [ 32.258892] __do_tune_cpucache+0x250/0x2d4 [ 32.258896] do_tune_cpucache+0x4c/0xe4 [ 32.258901] enable_cpucache+0xc8/0x110 [ 32.258905] setup_cpu_cache+0x40/0x1b8 [ 32.258909] __kmem_cache_create+0x240/0x358 [ 32.258913] create_cache+0xc0/0x198 [ 32.258918] kmem_cache_create_usercopy+0x158/0x20c [ 32.258922] kmem_cache_create+0x50/0x64 [ 32.258928] fsnotify_init+0x58/0x6c [ 32.258932] do_one_initcall+0x194/0x388 [ 32.258937] kernel_init_freeable+0x668/0x688 [ 32.258941] kernel_init+0x18/0x124 [ 32.258946] ret_from_fork+0x10/0x18 [ 32.258950] kmemleak: Object 0xffff8007b9aa7e00 (size 256): [ 32.258954] kmemleak: comm "swapper/0", pid 1, jiffies 4294697137 [ 32.258958] kmemleak: min_count = 1 [ 32.258962] kmemleak: count = 0 [ 32.258965] kmemleak: flags = 0x1 [ 32.258969] kmemleak: checksum = 0 [ 32.258972] kmemleak: backtrace: [ 32.258977] kmemleak_alloc+0x84/0xb8 [ 32.258982] kmem_cache_alloc_node_trace+0x31c/0x3a0 [ 32.258987] __kmalloc_node+0x58/0x78 [ 32.258991] setup_kmem_cache_node+0x26c/0x35c [ 32.258996] __do_tune_cpucache+0x250/0x2d4 [ 32.259001] do_tune_cpucache+0x4c/0xe4 [ 32.259005] enable_cpucache+0xc8/0x110 [ 32.259010] setup_cpu_cache+0x40/0x1b8 [ 32.259014] __kmem_cache_create+0x240/0x358 [ 32.259018] create_cache+0xc0/0x198 [ 32.259022] kmem_cache_create_usercopy+0x158/0x20c [ 32.259026] kmem_cache_create+0x50/0x64 [ 32.259031] fsnotify_init+0x58/0x6c [ 32.259035] do_one_initcall+0x194/0x388 [ 32.259039] kernel_init_freeable+0x668/0x688 [ 32.259043] kernel_init+0x18/0x124 [ 32.259048] kmemleak: Not scanning unknown object at 0xffff8007b9aa7e38 [ 32.259052] CPU: 190 PID: 1 Comm: swapper/0 Not tainted 5.0.0-rc2+ #2 [ 32.259056] Call trace: [ 32.259060] dump_backtrace+0x0/0x168 [ 32.259065] show_stack+0x24/0x30 [ 32.259070] dump_stack+0x88/0xb0 [ 32.259074] kmemleak_no_scan+0x90/0xf4 [ 32.259078] setup_kmem_cache_node+0x2b4/0x35c [ 32.259083] __do_tune_cpucache+0x250/0x2d4 [ 32.259088] do_tune_cpucache+0x4c/0xe4 [ 32.259092] enable_cpucache+0xc8/0x110 [ 32.259096] setup_cpu_cache+0x40/0x1b8 [ 32.259100] __kmem_cache_create+0x240/0x358 [ 32.259104] create_cache+0xc0/0x198 [ 32.259108] kmem_cache_create_usercopy+0x158/0x20c [ 32.259112] kmem_cache_create+0x50/0x64 [ 32.259116] fsnotify_init+0x58/0x6c [ 32.259120] do_one_initcall+0x194/0x388 [ 32.259125] kernel_init_freeable+0x668/0x688 [ 32.259129] kernel_init+0x18/0x124 [ 32.259133] ret_from_fork+0x10/0x18 Link: http://lkml.kernel.org/r/20190129184518.39808-1-cai@xxxxxx Fixes: 1fe00d50a9e8 (slab: factor out initialization of array cache) Signed-off-by: Qian Cai <cai@xxxxxx> Cc: Christoph Lameter <cl@xxxxxxxxx> Cc: Pekka Enberg <penberg@xxxxxxxxxx> Cc: David Rientjes <rientjes@xxxxxxxxxx> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> Cc: Catalin Marinas <catalin.marinas@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/slab.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) --- a/mm/slab.c~slab-kmemleak-no-scan-alien-caches +++ a/mm/slab.c @@ -550,14 +550,6 @@ static void start_cpu_timer(int cpu) static void init_arraycache(struct array_cache *ac, int limit, int batch) { - /* - * The array_cache structures contain pointers to free object. - * However, when such objects are allocated or transferred to another - * cache the pointers are not cleared and they could be counted as - * valid references during a kmemleak scan. Therefore, kmemleak must - * not scan such objects. - */ - kmemleak_no_scan(ac); if (ac) { ac->avail = 0; ac->limit = limit; @@ -573,6 +565,14 @@ static struct array_cache *alloc_arrayca struct array_cache *ac = NULL; ac = kmalloc_node(memsize, gfp, node); + /* + * The array_cache structures contain pointers to free object. + * However, when such objects are allocated or transferred to another + * cache the pointers are not cleared and they could be counted as + * valid references during a kmemleak scan. Therefore, kmemleak must + * not scan such objects. + */ + kmemleak_no_scan(ac); init_arraycache(ac, entries, batchcount); return ac; } @@ -667,6 +667,7 @@ static struct alien_cache *__alloc_alien alc = kmalloc_node(memsize, gfp, node); if (alc) { + kmemleak_no_scan(alc); init_arraycache(&alc->ac, entries, batch); spin_lock_init(&alc->lock); } _ Patches currently in -mm which might be from cai@xxxxxx are mm-page_owner-fix-for-deferred-struct-page-init.patch x86_64-increase-stack-size-for-kasan_extra.patch mm-hotplug-invalid-pfns-from-pfn_to_online_page.patch slab-kmemleak-no-scan-alien-caches.patch page_poison-plays-nicely-with-kasan.patch signal-allow-the-null-signal-in-rt_sigqueueinfo.patch