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 206BCC25B78 for ; Tue, 4 Jun 2024 15:02:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 90FB36B008C; Tue, 4 Jun 2024 11:02:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8C12E6B0092; Tue, 4 Jun 2024 11:02:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7873C6B0096; Tue, 4 Jun 2024 11:02:45 -0400 (EDT) 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 5ABEC6B008C for ; Tue, 4 Jun 2024 11:02:45 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 00183A1DD4 for ; Tue, 4 Jun 2024 15:02:44 +0000 (UTC) X-FDA: 82193523048.21.2834CA8 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf24.hostedemail.com (Postfix) with ESMTP id 0B46918003C for ; Tue, 4 Jun 2024 15:02:40 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=PcFyYteG; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf24.hostedemail.com: domain of horms@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=horms@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1717513361; 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=roqy3qbchva66aPUaMwtEA0R/cWN/YLfLafAKSDldSo=; b=dWBM7mI6bewifPoIcXaFWwl7TxTvm3K31DOpniF1Cg0243JM1/HSfJMzIjCcWaklSHDFTh Ab/75VIcxGr2dngXYoOCF5waLibslnoFAnT/BLzYN3qSwcuJyn2idFLXbBHGlUw8rCekoz qBjjhGG1BwICHUsSIaZ45tr2j0YzRNw= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=PcFyYteG; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf24.hostedemail.com: domain of horms@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=horms@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1717513361; a=rsa-sha256; cv=none; b=GtsqMD9ZRgWRnbSfMsTQrEkh4avn2o9nRKsDU54CEb6eudz3Baok/AwnI/REDlUEzrWoyu dH6UEZa5VzqhJJjmlZxp7lJeOG1S6KgnIJ4Zdvl6vRnEDHXB7XTem6McSYPyQJ6dNtVkht RlPV9EEpZ/MoxsY/ZpXyeKQQ0qgR9/Y= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id DCECECE0E8C; Tue, 4 Jun 2024 15:02:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E0BD9C2BBFC; Tue, 4 Jun 2024 15:02:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717513355; bh=xtJUyNxwB7M1j6qR9LAvxbMNOmZxHaugTMRR02cMN0g=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=PcFyYteGPx/DLK2FaeMM8zewZ/t0mDDBxMsBzBzhxtDLVgoapx658UcdzRfQ9xd8q Fe8q8wddXOp4eBjWidUKbiB4xyPgrvn5Ibp8p6REqg2XtX/yAmhkLI8jGVuJKXB43e aIWSCDddiK2YemWgtQ+VCuKqdcdoER9sYPiBv7ziIOKcPLdpB0fBpcfNgrcbIjK87i AR2uG6QiuS0oZOgWOcyrurtPfWoUQetrTtOtkeyVgrsi+Te46ruuoBKTGLuBT52TRK 8QLogsZuUqOr1lZFpkG0nKIZ/TCwx2Enn+6TwYaR5/QM+qVYbc23ZG2QknvVuROtGN YI7pW5PhSNevQ== Date: Tue, 4 Jun 2024 16:02:28 +0100 From: Simon Horman To: Kees Cook Cc: Vlastimil Babka , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , jvoisin , Andrew Morton , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, linux-mm@kvack.org, "GONG, Ruiqi" , Xiu Jianfeng , Suren Baghdasaryan , Kent Overstreet , Jann Horn , Matteo Rizzo , Thomas Graf , Herbert Xu , linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, netdev@vger.kernel.org Subject: Re: [PATCH v4 4/6] mm/slab: Introduce kmem_buckets_create() and family Message-ID: <20240604150228.GS491852@kernel.org> References: <20240531191304.it.853-kees@kernel.org> <20240531191458.987345-4-kees@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240531191458.987345-4-kees@kernel.org> X-Rspamd-Queue-Id: 0B46918003C X-Stat-Signature: 5mme8agbe496n8617foxsgrx71y4szw1 X-Rspam-User: X-Rspamd-Server: rspam11 X-HE-Tag: 1717513360-106706 X-HE-Meta: U2FsdGVkX1+dfwRgYyf1YpzjeL2mQ3S3gAeQg60iLqi2tVNta0Bf2Z4iBprsN27IN6V3tOjaecTL+Y5gvtiSlpS/HDyL4uslLYWaEujVTWmCwNij6a+VL7pja6b7/clybnpzOaRUgyd9uBZdal12qOdzzjWegOePqsTMKT4CmhUY0QIG7/tb4WyiyDHbpao0R/fquZB1sJS8rvK1t+E9f4Agn4Ek7vjVRdZt5KXdBd6q02c7hqzBXJJrTQhez+blL6R1E6tJNaDNcokB/T9Lkfdle7KVROPi0n7xuuYnxZfUAx9H0LP7XUwbVxmXZ0voGAMD6+G6rjB7vc4VrQiHDPDFC4CmPTZWDcvqsghQUtj5yVJXG56++2+A1ulh0PKEx37hrbkmdQ59M/5hmwNBAn/nLivpdYtK2yXd25kY+kb/dpqgKOZagF5CJ9vaC3xrECaB5BihfDxMmDtTUJgs4BG2bBeHeBB8B6dIAjhSmXSziJ7Lq+R0y+Gjj9g0wqKnTzSvy9IUWHEdTBCjUbb3TZRTGQE5BItbikK5ONfXZg1NJ+IliyBpVeKHZKNnvvg5fIFZUZyvY/T7v4eQQnWZ9zvS5gqqcktWuADHwjzSNDfg/pKc3Xv+ctQRLXZuJb7EoBpzxmbf+L96z2Dg9iagfGIhRCy1e/ktImNfavZgEHSBl2UB20OT325yR+AkSKQ3JzMSCu6OSUZ0orfggVDsJUAxoeuBkzklaMtN9Xz5AbjYqEGB5XUb4qrz0aXkQk+n3kmYClnXiFB/KTA45qmppTm+AVr7v1L1KzKk1aOC2VG+oTLkJF98L8JeHCOxEzQaPM1kjE0kV/wfVue12sK2XjNk3UGGswQRwudgaAZmTxBbmx+6bnoySt1hiGzKDKIzvvAvztOdzeLuAJlqgdP466l+C4wLA1o8dQqCRks9bR0WVk8eqyBNCFKGg/ApXdNigR9le7bqr2GD7cpI6RB y2NgOW7t plwwk2IpLaEGJQ6k8Pmvq/q5wdG2JvyWhQNCTsXN4KRNSVofkm+2TV00Qt+k+OEChOYTIB0vDtdbpJymU3K6cd46O7evTDY7ms+wD31mckXe7y4C6Sbcax5OselyIO0XAhHmkyis4aSLYckqhozAxIEt96t26a4IogURUilroQLTy7nYpnFdmcKjZXuyS92EZqNw/aorfn29gTV4r+3AT/kbmjBQU4Ad3/sjMye9katHoakCI+5n2/Vmm6SpPLrHwn0+5WIvkA4yCmVUaiTzTDkWVgRtBA2kPGWiv59Z2s40ZA9GHxFgUoEGTvA== 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 Fri, May 31, 2024 at 12:14:56PM -0700, Kees Cook wrote: ... > diff --git a/mm/slab_common.c b/mm/slab_common.c > index b5c879fa66bc..f42a98d368a9 100644 > --- a/mm/slab_common.c > +++ b/mm/slab_common.c > @@ -392,6 +392,82 @@ kmem_cache_create(const char *name, unsigned int size, unsigned int align, > } > EXPORT_SYMBOL(kmem_cache_create); > > +static struct kmem_cache *kmem_buckets_cache __ro_after_init; > + > +kmem_buckets *kmem_buckets_create(const char *name, unsigned int align, > + slab_flags_t flags, > + unsigned int useroffset, > + unsigned int usersize, > + void (*ctor)(void *)) > +{ > + kmem_buckets *b; > + int idx; > + > + /* > + * When the separate buckets API is not built in, just return > + * a non-NULL value for the kmem_buckets pointer, which will be > + * unused when performing allocations. > + */ > + if (!IS_ENABLED(CONFIG_SLAB_BUCKETS)) > + return ZERO_SIZE_PTR; > + > + if (WARN_ON(!kmem_buckets_cache)) > + return NULL; > + > + b = kmem_cache_alloc(kmem_buckets_cache, GFP_KERNEL|__GFP_ZERO); > + if (WARN_ON(!b)) > + return NULL; > + > + flags |= SLAB_NO_MERGE; > + > + for (idx = 0; idx < ARRAY_SIZE(kmalloc_caches[KMALLOC_NORMAL]); idx++) { > + char *short_size, *cache_name; > + unsigned int cache_useroffset, cache_usersize; > + unsigned int size; > + > + if (!kmalloc_caches[KMALLOC_NORMAL][idx]) > + continue; > + > + size = kmalloc_caches[KMALLOC_NORMAL][idx]->object_size; > + if (!size) > + continue; > + > + short_size = strchr(kmalloc_caches[KMALLOC_NORMAL][idx]->name, '-'); > + if (WARN_ON(!short_size)) > + goto fail; > + > + cache_name = kasprintf(GFP_KERNEL, "%s-%s", name, short_size + 1); > + if (WARN_ON(!cache_name)) > + goto fail; > + > + if (useroffset >= size) { > + cache_useroffset = 0; > + cache_usersize = 0; > + } else { > + cache_useroffset = useroffset; > + cache_usersize = min(size - cache_useroffset, usersize); > + } > + (*b)[idx] = kmem_cache_create_usercopy(cache_name, size, > + align, flags, cache_useroffset, > + cache_usersize, ctor); > + kfree(cache_name); > + if (WARN_ON(!(*b)[idx])) > + goto fail; > + } > + > + return b; > + > +fail: > + for (idx = 0; idx < ARRAY_SIZE(kmalloc_caches[KMALLOC_NORMAL]); idx++) { > + if ((*b)[idx]) > + kmem_cache_destroy((*b)[idx]); nit: I don't think it is necessary to guard this with a check for NULL. > + } > + kfree(b); > + > + return NULL; > +} > +EXPORT_SYMBOL(kmem_buckets_create);