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 03FA2D1BDF2 for ; Mon, 4 Nov 2024 21:32:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8DBCA6B0095; Mon, 4 Nov 2024 16:32:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 864E66B00A5; Mon, 4 Nov 2024 16:32:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 706146B00A6; Mon, 4 Nov 2024 16:32:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 4E2266B0095 for ; Mon, 4 Nov 2024 16:32:32 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id B9AD0409AF for ; Mon, 4 Nov 2024 21:32:31 +0000 (UTC) X-FDA: 82749710736.30.E1E9856 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf28.hostedemail.com (Postfix) with ESMTP id 1F23AC000B for ; Mon, 4 Nov 2024 21:31:56 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=twwhuzn5; spf=pass (imf28.hostedemail.com: domain of kees@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=kees@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730755785; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=v4x4UKkrOKQCzsD2UJXMdS1cNJIMD1fEJNSNQCcD5Pk=; b=fe5/OH9T7sUJbx61V2XziR0v0QJSEH25Kd10Zh/YDYfduXx+hpjZOHyKwbw8bwKL1HNqUl XrqRGu+inZH8YY2JWZrdCb2YR9UOV09koVzJrVOTJqQKZVf6HZfI65Glfypje4uWKUmRkv 6NxFjE98ZCrG91G4s82SIgysGkKLypU= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=twwhuzn5; spf=pass (imf28.hostedemail.com: domain of kees@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=kees@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730755785; a=rsa-sha256; cv=none; b=r2YvUxHz133BwzerBXUwr6eShr/tvwFHCPv3dpQYrk32ERvMQyxHzv3fQ/xiebpl9l167i u6HceiyQXjjMq29PY4Rxx8uVMBUbtIZ9jLC3bb8CT8CX/MKdVrJtQ4Uajggr0TlV9R8VZH tk7OIEbpOzrvIDpoIIq5sDxC8PFWlKA= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 1B25A5C2311; Mon, 4 Nov 2024 21:31:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 87AC7C4CECE; Mon, 4 Nov 2024 21:32:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1730755948; bh=CaSTjw7VNvlfbt9T9gHr6/MklZUOZLnkk9iGT2oFZ/s=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=twwhuzn5BrsZwg+6BbEdbLr9N8OJAW8FsBiOV4strufGFZQHdzJIF4VvR+dMdXGwT dqz7T+cwthLwstzQp864guC1Qti9lqurImzFpEFZtDdPCNHNFKp2Y7kwgoN5kz+0Z3 d6qHkinr4Q9fgOBVY5ugxDt9eEadLQTMf3lYvdDwNc3adk7VxQhab1ac5a3QmaCm50 I4SbIoRap6S5m2SIzsFnLv49m5HJ6QE7vzWhZ4pD6gg5OGTD5n8hHi+yqz4BTuPvoT Mc1QhVyQhsyVuuUJqZg5Jy+JXAwSzqwlhbd2mbS2FGacJV208Uj1j3kzNbVTwcqbwr 0iMslghptqeyQ== Date: Mon, 4 Nov 2024 13:32:25 -0800 From: Kees Cook To: Vlastimil Babka Cc: Koichiro Den , 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, stable@vger.kernel.org Subject: Re: [PATCH] mm/slab: fix warning caused by duplicate kmem_cache creation in kmem_buckets_create Message-ID: <202411041330.7A0F716E5@keescook> References: <20241104150837.2756047-1-koichiro.den@gmail.com> <9e6fd342-ef7f-4648-afa3-bf704c87bf8f@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9e6fd342-ef7f-4648-afa3-bf704c87bf8f@suse.cz> X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 1F23AC000B X-Stat-Signature: 94abm9smw7nzot16i6fjwqy18cxwsopy X-Rspam-User: X-HE-Tag: 1730755916-815266 X-HE-Meta: U2FsdGVkX19bRDzKTPLzFaUnGj72Rz7XUoVx+15KizC/ZzTQXf5IQEqpt9Z0pk272vDz8QgFRu3R1U/k5OsGQamZFFz9HxvlY8sHeSlii6pbZO3T7ZMh2II1DNDuk60O0z5mVQHHzSsFrOQ1kI5QvgKGmj9kMp88EeGffA876AKLM54oKJlycDHapomd/RjREiEA/q0R1VWkt42STp+vbuK3KZ6uDO84W/bBifgPKh11pN7zzVyDM1oHJ6pAH/kwuSfe1FSgJwL3IwHDzlarzqFfcZwUov8ePBF0ojaPoSdFkxgeQpzcvGuXxCydXqNhzsp/oGVT5EV9eYWrShAk/1+RdxyFjO+JmlakmxfQTlxp+LbTTicRH46OtHZZ3xzQqfYLQMA+9P/SAD8/y9tCzRwtf/8uiSmDusSFIsdz2uC53m7xc1THzrCJqOdAHDeAoO37fdgfufQTxJ3nnrgZODC7mUeEJGB7odr2KGiREQ+wCbyn2l7YxRagNQgoKJ7sLxAlugoNme1Nku04OckNg9Wy2Munp3SBQObthK/yfZqo0uzeKl6lBSmmUvyjIDlbXyIrBm+IwP0UUI83MRfU3j2u3jrhkDxDhTXciqHOlkjXW1h57gFGla1V9GN6ZPuPmNRmZcniV2lkvt5saFYrCh2x7bASRpMd+9/tXZyMc0Gxg0JJOar9ElHjuNatwRh2CGn0SqNjznJ+tIrWwVlDPw0/4G+aFEQgY9RQtCZttL8FGiJ+Zg1mBuqRqrCAVH/8d+XGJKtjk2M5EBnRiWv1WoLEE9/Bs7lNbPx4YgSEriHM/r93skYthRfJYysywbIV6uT+LgkY9b7qTlbFYdYSq/kMjTEijBH8L+VXKJdV3RDYGOlw6H2ZAqUMwqgzZQUcqDKQG3aNnrEBW4+VoZ6pJJRo1QeUFasDHRqUL3RdJRHT042XLmZiUdGQ3nYBG2GjNB9Yp0GsTFeGjVGs5/s B1QrdqE/ Lsv3CsSVsIavORciTNHOVbiUl3b9S5hnboQC/sVtEEhzRBcz8qqUjIPDg6Cuh4c1RK8hIC/2MEir0YIPhiHAsdP/werxgyoEpz5K4D1ASzjeSNlf6wbmYP1iKazRuMMPmHlaOvr/3WraTpu1p8lte3kozS4ioYqrPSDk5KFgrTHnpiVn7rx1CQ5Qb3HCfGbTmmHIvaoHZY8K3FgSqxeJhZRCzdE0Ow9Dcb88nRbsZDj1k90D+VFuWe6zC4dFi3kZghbMse8/V+fse6X9HX1EnYX8j0nCDTA1bONcY3NHT/Tq2YGrasiY+IJAouBAy8qoKoxA4y5x0gi9FUR4mi32NSMO6Vv6V+XjquAK3evcvY2ArFjEVdJJ4zUvYffkr2ekFA2hkTHHQnn4hEBrJzK+nnR1mBQYpr5k35BSb 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 Mon, Nov 04, 2024 at 04:40:12PM +0100, Vlastimil Babka wrote: > On 11/4/24 16:08, Koichiro Den wrote: > > Commit b035f5a6d852 ("mm: slab: reduce the kmalloc() minimum alignment > > if DMA bouncing possible") reduced ARCH_KMALLOC_MINALIGN to 8 on arm64. > > However, with KASAN_HW_TAGS enabled, arch_slab_minalign() becomes 16. > > This causes kmalloc_caches[*][8] to be aliased to kmalloc_caches[*][16], > > resulting in kmem_buckets_create() attempting to create a kmem_cache for > > size 16 twice. This duplication triggers warnings on boot: > > > > [ 2.325108] ------------[ cut here ]------------ > > [ 2.325135] kmem_cache of name 'memdup_user-16' already exists > > [ 2.325783] WARNING: CPU: 0 PID: 1 at mm/slab_common.c:107 __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.327957] Modules linked in: > > [ 2.328550] CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.12.0-rc5mm-unstable-arm64+ #12 > > [ 2.328683] Hardware name: QEMU QEMU Virtual Machine, BIOS 2024.02-2 03/11/2024 > > [ 2.328790] pstate: 61000009 (nZCv daif -PAN -UAO -TCO +DIT -SSBS BTYPE=--) > > [ 2.328911] pc : __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.328930] lr : __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.328942] sp : ffff800083d6fc50 > > [ 2.328961] x29: ffff800083d6fc50 x28: f2ff0000c1674410 x27: ffff8000820b0598 > > [ 2.329061] x26: 000000007fffffff x25: 0000000000000010 x24: 0000000000002000 > > [ 2.329101] x23: ffff800083d6fce8 x22: ffff8000832222e8 x21: ffff800083222388 > > [ 2.329118] x20: f2ff0000c1674410 x19: f5ff0000c16364c0 x18: ffff800083d80030 > > [ 2.329135] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 > > [ 2.329152] x14: 0000000000000000 x13: 0a73747369786520 x12: 79646165726c6120 > > [ 2.329169] x11: 656820747563205b x10: 2d2d2d2d2d2d2d2d x9 : 0000000000000000 > > [ 2.329194] x8 : 0000000000000000 x7 : 0000000000000000 x6 : 0000000000000000 > > [ 2.329210] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000 > > [ 2.329226] x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000000 > > [ 2.329291] Call trace: > > [ 2.329407] __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.329499] kmem_buckets_create+0xfc/0x320 > > [ 2.329526] init_user_buckets+0x34/0x78 > > [ 2.329540] do_one_initcall+0x64/0x3c8 > > [ 2.329550] kernel_init_freeable+0x26c/0x578 > > [ 2.329562] kernel_init+0x3c/0x258 > > [ 2.329574] ret_from_fork+0x10/0x20 > > [ 2.329698] ---[ end trace 0000000000000000 ]--- > > > > [ 2.403704] ------------[ cut here ]------------ > > [ 2.404716] kmem_cache of name 'msg_msg-16' already exists > > [ 2.404801] WARNING: CPU: 2 PID: 1 at mm/slab_common.c:107 __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.404842] Modules linked in: > > [ 2.404971] CPU: 2 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W 6.12.0-rc5mm-unstable-arm64+ #12 > > [ 2.405026] Tainted: [W]=WARN > > [ 2.405043] Hardware name: QEMU QEMU Virtual Machine, BIOS 2024.02-2 03/11/2024 > > [ 2.405057] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > > [ 2.405079] pc : __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.405100] lr : __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.405111] sp : ffff800083d6fc50 > > [ 2.405115] x29: ffff800083d6fc50 x28: fbff0000c1674410 x27: ffff8000820b0598 > > [ 2.405135] x26: 000000000000ffd0 x25: 0000000000000010 x24: 0000000000006000 > > [ 2.405153] x23: ffff800083d6fce8 x22: ffff8000832222e8 x21: ffff800083222388 > > [ 2.405169] x20: fbff0000c1674410 x19: fdff0000c163d6c0 x18: ffff800083d80030 > > [ 2.405185] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 > > [ 2.405201] x14: 0000000000000000 x13: 0a73747369786520 x12: 79646165726c6120 > > [ 2.405217] x11: 656820747563205b x10: 2d2d2d2d2d2d2d2d x9 : 0000000000000000 > > [ 2.405233] x8 : 0000000000000000 x7 : 0000000000000000 x6 : 0000000000000000 > > [ 2.405248] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000 > > [ 2.405271] x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000000 > > [ 2.405287] Call trace: > > [ 2.405293] __kmem_cache_create_args+0xb8/0x3b0 > > [ 2.405305] kmem_buckets_create+0xfc/0x320 > > [ 2.405315] init_msg_buckets+0x34/0x78 > > [ 2.405326] do_one_initcall+0x64/0x3c8 > > [ 2.405337] kernel_init_freeable+0x26c/0x578 > > [ 2.405348] kernel_init+0x3c/0x258 > > [ 2.405360] ret_from_fork+0x10/0x20 > > [ 2.405370] ---[ end trace 0000000000000000 ]--- > > > > To address this, alias kmem_cache for sizes smaller than min alignment > > to the aligned sized kmem_cache, as done with the default system kmalloc > > bucket. > > > > Cc: # 6.11.x > > Fixes: b32801d1255b ("mm/slab: Introduce kmem_buckets_create() and family") > > Signed-off-by: Koichiro Den > > --- > > Thanks for catching this. > Wonder if we could make this a lot simpler in kmem_buckets_create() by > starting with the current: > > size = kmalloc_caches[KMALLOC_NORMAL][idx]->object_size; > > and adding: > > aligned_idx = __kmalloc_index(size, false); > > now the rest of the loop iteration would work with aligned_idx and if it > differs from idx, we assign the cache pointer also to idx, etc. > > This should avoid duplicating the alignment calculation as we just extract > from kmalloc_caches[] the result of what new_kmalloc_cache() already did? Yeah, I was thinking similar stuff -- the aligned stuff is the alias for the actual stuff. I like the bitmask for tracking the aliases. :) -- Kees Cook