From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2780C47DD9 for ; Wed, 28 Feb 2024 07:34:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 189D96B026E; Wed, 28 Feb 2024 02:34:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 13A996B026F; Wed, 28 Feb 2024 02:34:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F1DC36B0271; Wed, 28 Feb 2024 02:34:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id E0D176B026E for ; Wed, 28 Feb 2024 02:34:07 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 3A06CC0F4E for ; Wed, 28 Feb 2024 07:34:07 +0000 (UTC) X-FDA: 81840398934.18.8E05472 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by imf20.hostedemail.com (Postfix) with ESMTP id 11EAC1C000A for ; Wed, 28 Feb 2024 07:34:04 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JHupWgBj; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=ixu5VBa1; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=KPvuFSE8; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=asXayAvQ; dmarc=none; spf=pass (imf20.hostedemail.com: domain of vbabka@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1709105645; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=k3LGzcqdUbWrUK1m7X7UOq9Nhx08BLmfyHuXvzkmxkM=; b=KESDQCal+2RyQiMjVYTziv4eyfnVxEGe4W/ouZJQDzqOFkS9PCFhNTso+UROZAm4kiGAeb b0PzUD0Uyc9rDhHVmM8FIl7yFIlmc49tSOBYxfu211apOp44JUkll45mGgm/498auMBhnU 1RVu1obz5/MrjSmacUsnM0U7tA1/AwA= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=JHupWgBj; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=ixu5VBa1; dkim=pass header.d=suse.cz header.s=susede2_rsa header.b=KPvuFSE8; dkim=pass header.d=suse.cz header.s=susede2_ed25519 header.b=asXayAvQ; dmarc=none; spf=pass (imf20.hostedemail.com: domain of vbabka@suse.cz designates 195.135.223.130 as permitted sender) smtp.mailfrom=vbabka@suse.cz ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1709105645; a=rsa-sha256; cv=none; b=aFRqoOgZ84NKv4SR/+3OphTeHu9pQP/3G0GtvZ8OsHQcoDFBe2jrf7Bsc+F+azUj409HHC U7N+bneg0+Y258bLGTZQvQBibrWlOvzhCb//iLFb9RU86iYPPcF3NIv2W8dU8eV4bvJGJO 4ydK4Q/gK7v7px0Pj1In81dDL/0uJfY= Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id EEFB722629; Wed, 28 Feb 2024 07:34:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1709105643; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k3LGzcqdUbWrUK1m7X7UOq9Nhx08BLmfyHuXvzkmxkM=; b=JHupWgBjEBJmo+JDVbK8fWllVwHxJU/i8Ffni5FWDaF9+Fy6WAgzOWdOcWgCrLAdZUpBqS AxitScqVQst9xqXcdRF5YJr+XyE+LrV5XwnasqnuSnZGG8/rcsXTJ0qquo9PJEvMDnBk46 p+Ll4ybR5fSp7PO7JSsbq3ymxrD+nLY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1709105643; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k3LGzcqdUbWrUK1m7X7UOq9Nhx08BLmfyHuXvzkmxkM=; b=ixu5VBa1f8NYrwhfdeSht1EYBLeAEbY7Tzw2L0lgvompxa4vsmROSgDFaGdfaqBi1oXnXu Jeef1q8hSkdxmnAA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1709105641; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k3LGzcqdUbWrUK1m7X7UOq9Nhx08BLmfyHuXvzkmxkM=; b=KPvuFSE8rukyjepDCC0pQX38Zy6VGSFg5OSSYUumDOgkOZBWaR1b6OK47TO7bL4RX+Ma9D oEaDQJi/H27a/QP+pij764buHVekBpmDNXuhMJti9B61ttYmqrCRupQDu6ZT5i2u966bMq eGkpbqc/Ta4ytZnzTaPr5pTn/Kb8bSg= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1709105641; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k3LGzcqdUbWrUK1m7X7UOq9Nhx08BLmfyHuXvzkmxkM=; b=asXayAvQezsfrfzn2cp5BgtQp9DedUPHih+W2KBjgMoQ66f+GtLsBYAf2dvAUPCupDDOEV 6Vvolxem+n9MJQCQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id C6C2A13AAA; Wed, 28 Feb 2024 07:34:00 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id QHHyL+jh3mWKEQAAD6G6ig (envelope-from ); Wed, 28 Feb 2024 07:34:00 +0000 Message-ID: <303e28cb-9c9e-470c-bee2-b7cf4b12e810@suse.cz> Date: Wed, 28 Feb 2024 08:34:00 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] mm/slab: Fix a kmemleak in kmem_cache_destroy() To: Xiaolei Wang , cl@linux.com, penberg@kernel.org, rientjes@google.com, iamjoonsoo.kim@lge.com, akpm@linux-foundation.org, roman.gushchin@linux.dev, 42.hyeyoo@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20240228030408.2740647-1-xiaolei.wang@windriver.com> Content-Language: en-US From: Vlastimil Babka In-Reply-To: <20240228030408.2740647-1-xiaolei.wang@windriver.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spamd-Bar: + X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 11EAC1C000A X-Stat-Signature: 3i8qk5u65w4ym3kd9k93hkgrf9j4be86 X-HE-Tag: 1709105644-587399 X-HE-Meta: U2FsdGVkX1/3XtJn3xnWEEYAp6jMIpN60e05sziEFPkvUKrce3UPtI2t8KNd35x4Wg/nwiQeFDwY0xlMXI24VkSwyh4o9MvaCJF8hv9jyImJVc4ALn8ySpwuctNyZiUlJR/wNugOn5tYCPoLP/MIjt01qu3/lXyTlAJB6Na/sdWyUdsmBRSI5xk6hNGU8Z0uidBZux7zuPCo7dUGy/InwTWeQhMtAhT/Mlk2d+3x7/mYqc7AWlNTwkoPL0n8l45ZUHU6jQ4w7j7qFy2680MweUjbg+C0SvMdo6WbbvgzdvGrdaA5rNJxcZRh/TqWSPKTRlLoIxMzLWo1opHJd+HeLSAVFfOoR8ifM/aWrJPUc/7Cu6jumbFgahnHlfI8xkblCJpoNqWN4v7rJjN7rwtpX37oBUTCWKqZH5MPWWZfMY+PTBK24MgS453pIAoBax/0bwNMyhoceQXk8ua8oDEY1UAulKiy8cq4/Sy6yYvMwwFQtuSSWziUU9INyf01fAbfCyzG6Xz+PcEyEavsgCnad94qLy5jY2vDFmJ1SoC0VpYji51AYB37H3xxG7gNa59NwNlMa9Ez2eAR/tmj/0K3cKJctK7VTjUUS5T7GZJ8BbxtjXCcHiV9DtNZJw8nXusivPzcvUGi6AeqH84F3lllNxTe0s6cA1Uz0m04P6lGvBzChb84m/B5hAVTyNGJYjW0d4RbiogYmDmJgTZe4KHa90MZkkoiHbaADernTismTFKFIo5am5o2w5fCl9yrEYI3+2I9RqCrX1eyrSFz4t9t7ETEaubKJ5cL7yXDK9cf4jSnF4OkHjLR0zIPAlSS3JPAl61OeqhvtCKRtnj/CUJNgrgQEzxTt/ZGjTEwfqjKabnn6qcpw0RhcvqY80UdzMiRzc1L/ahlVRNwI9EBgl4ETId7gCK+f78gDLGjbnPlU1taxq0xLzUQJdZkKcim1/6mwkyUT9zX1FBxCjr4aF9 HKfcpHoA PHzjh/goeNcwwLnZyumgdiULTRzCarR626+NAQnNfzrK1nNGbXCTBCv/AJtohtUZrSI9bjfXqMp9IZbYihh+/X7/z3A== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 2/28/24 04:04, Xiaolei Wang wrote: > For earlier kmem cache creation, slab_sysfs_init() has not been called. > Consequently, kmem_cache_destroy() cannot utilize kobj_type::release to > release the kmem_cache structure. Therefore, tweak kmem_cache_release() > to use slab_kmem_cache_release() for releasing kmem_cache when slab_state > isn't FULL. This will fixes the memory leaks like following: So do I understand correctly the leak happens when a cache is destroyed while slab_state < FULL? Do we ever destroy a cache that early? > unreferenced object 0xffff0000c2d87080 (size 128): > comm "swapper/0", pid 1, jiffies 4294893428 > hex dump (first 32 bytes): > 00 00 00 00 ad 4e ad de ff ff ff ff 6b 6b 6b 6b .....N......kkkk > ff ff ff ff ff ff ff ff b8 ab 48 89 00 80 ff ff.....H..... > backtrace (crc 8819d0f6): > [] kmemleak_alloc+0xb0/0xc4 > [] kmem_cache_alloc_node+0x288/0x3a8 > [] __kmem_cache_create+0x1e4/0x64c > [] kmem_cache_create_usercopy+0x1c4/0x2cc > [] kmem_cache_create+0x1c/0x28 > [] arm_v7s_alloc_pgtable+0x1c0/0x6d4 > [] alloc_io_pgtable_ops+0xe8/0x2d0 > [] arm_v7s_do_selftests+0xe0/0x73c > [] do_one_initcall+0x11c/0x7ac > [] kernel_init_freeable+0x53c/0xbb8 > [] kernel_init+0x24/0x144 > [] ret_from_fork+0x10/0x20 > > Signed-off-by: Xiaolei Wang > --- > mm/slab_common.c | 8 ++++++-- > mm/slub.c | 6 ++---- > 2 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/mm/slab_common.c b/mm/slab_common.c > index 238293b1dbe1..b6b35bcdd196 100644 > --- a/mm/slab_common.c > +++ b/mm/slab_common.c > @@ -404,8 +404,12 @@ EXPORT_SYMBOL(kmem_cache_create); > */ > static void kmem_cache_release(struct kmem_cache *s) > { > - sysfs_slab_unlink(s); > - sysfs_slab_release(s); > + if (slab_state >= FULL) { > + sysfs_slab_unlink(s); > + sysfs_slab_release(s); > + } else { > + slab_kmem_cache_release(s); > + } > } > #else > static void kmem_cache_release(struct kmem_cache *s) > diff --git a/mm/slub.c b/mm/slub.c > index 2ef88bbf56a3..9ba59d064b6d 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -6792,14 +6792,12 @@ static int sysfs_slab_add(struct kmem_cache *s) > > void sysfs_slab_unlink(struct kmem_cache *s) > { > - if (slab_state >= FULL) > - kobject_del(&s->kobj); > + kobject_del(&s->kobj); > } > > void sysfs_slab_release(struct kmem_cache *s) > { > - if (slab_state >= FULL) > - kobject_put(&s->kobj); > + kobject_put(&s->kobj); > } > > /*