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 D7061C3DA59 for ; Sat, 20 Jul 2024 16:44:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E159F6B0083; Sat, 20 Jul 2024 12:44:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DC5426B0085; Sat, 20 Jul 2024 12:44:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C8D1F6B0088; Sat, 20 Jul 2024 12:44:22 -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 AA78F6B0083 for ; Sat, 20 Jul 2024 12:44:22 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 930F180DC8 for ; Sat, 20 Jul 2024 16:44:21 +0000 (UTC) X-FDA: 82360703922.22.DA1CA40 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf21.hostedemail.com (Postfix) with ESMTP id E822C1C0009 for ; Sat, 20 Jul 2024 16:44:18 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="i/sZqTPX"; spf=pass (imf21.hostedemail.com: domain of kees@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=kees@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1721493815; 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=ZBvaNLfsCuacflJVjBLIhchF/COSsYjG7CKo0jjKOME=; b=3+LWff3P9G77Sd9sv+zfCnHBVEAlbUxdAk+AWWbxziJAfgN3NHxcXe0lwNKQfu6yJMWadj /1Nusw/8Vi7j4VjUHpU5QRyBrWDsOcLabvEJnT0yryDBlo85T72wL6qCcglDdc/zoiEI/7 PNga0HqVvTLyu3ZmI9vV4lN5KwZNOnk= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721493815; a=rsa-sha256; cv=none; b=yNXMo9WV0BR57x/kb5YBvD0IrsvA/DywKOygkWtXJ194GeocY1LUiN8wwQANl4NFfXzjcT g0mfI4/6fsRZq/5FIXBGa6x1DMowMvQTP/UnfH8Wd/WQ7Bo15OyreSwqMGCb60+Qzwaa9H PXJq3UsD2wb3r31SCI+Y9fFHUSeo0Gc= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="i/sZqTPX"; spf=pass (imf21.hostedemail.com: domain of kees@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=kees@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id E75F260DD5; Sat, 20 Jul 2024 16:44:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86282C2BD10; Sat, 20 Jul 2024 16:44:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721493857; bh=co3eFJoJmB8r16P3eCUweHLirAF/oqq5JYSMK7J3rvI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=i/sZqTPXVLOFI6rgsgCp/etM54zIrGYuMA3K+hWkWKK2kCBwgFYsHvPq/YP34/b5o SIB0Ooco5ZznJM9uWe2WEaz1xLnyx+qYzp8ZmqvZrYz9FwYcHppEHcZzUavksQRF1L rGGsS2oC3xr0T74mxTkyacLGmi6isLALLSPV8BboHdVlCaok8yYm37k7x2OvsMWz2x YYKsaC1Nr1j+b24GxTGXLDBTIyfH6zk3arY0HG7K7odOXhMsR86vj6/Zpal4chbLHh iq81QIv6RbT+IwYcaGkxMWzjvPldkWcGqhfN1RJOqdxs11gK1NtDcOxE+8Zxu0ceVQ H6mn3KAEv3Mdw== Date: Sat, 20 Jul 2024 09:44:17 -0700 From: Kees Cook To: David Rientjes Cc: Vlastimil Babka , Christoph Lameter , Pekka Enberg , Joonsoo Kim , Andrew Morton , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, "Gustavo A . R . Silva" , Bill Wendling , Justin Stitt , Jann Horn , Przemek Kitszel , Marco Elver , linux-mm@kvack.org, Nathan Chancellor , Nick Desaulniers , linux-kernel@vger.kernel.org, llvm@lists.linux.dev, linux-hardening@vger.kernel.org Subject: Re: [PATCH] slab: Introduce kmalloc_obj() and family Message-ID: <202407200942.ECB06F1@keescook> References: <20240719192744.work.264-kees@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Stat-Signature: jy8f1g75yxfso3xahrmpjnf3sr6gauce X-Rspamd-Queue-Id: E822C1C0009 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1721493858-432086 X-HE-Meta: U2FsdGVkX1817NYqgCUQrRHUquc2UqDncj/IaDA8SC9jHublk7oNnONk5+Kiey5NJ+eMIXELY/YtH9A5Nu5AhriZVo4/YckYXCofnzqexTQYMGSuuMXn5cNdACLRNKwOiiLPHz0UlGFET737UprZMuPzr7RB4PTn1rTyycnskO0HJ/AAH3OKIiTzeo4bmV7TT/LFC3wI/k3cFsKmhM2ZOIik8av9tQNEjikCJNe78j2T9p4RfcCw/Q0pljMwCE6fneSUS5dwHLOayj95fJBCQsd0JVvAxjJehBpI/VFdBntsL0QbBrUtD4cLcGOVkvt9KuRcXyKeuaHnmUW8Mwff9eIxqUtPQJE0B8Ld6su68HMeAj4afFqJzAmURsbhR81o+KMCK3HIDyq/jHRON2VCZ6oEHD+gwhYXubGiED42fMeD2FBBo1Rrtes7qsWJIYe8Sh6X0T3qPawPiuCbsTMqVRENfXMx6qNd7fZoEizn3eP+VgZJwyG5WHbBxqAcqp27Rtikja7pl4qkQPCdAEE3RvNKZwHY1VUYzh0onS0xtoG+A+IrUEXCqThQksCsdi6CLSSSE8zkHq8UDU8R6xqYQLU6DUYVXtbPddNXjGAUPQ5BHqqVNcCF7sHONpfYow1bwh3RJibxDPFEyWm1YTtozTu512SY51LsF+jsIKS0oN4bcSQqV1TEne+/H7m14PgplxfpYfJUVbuQvwPz/KmHp4bfcsxRwzDwUNTiFW3nrUTXYTo2Nb3Iq4aK7Eg/psDWJ1MRoQ0HoKXa6ys4hK3e4YRaQ+2ej3GBWomg7p7ezuY1di6bA/U1md+zYO+E9RPFVPpNv5jqnljUempwCp2A9yR0Es25OdWKHMr5Q1xcwpCvc51rgL7Pv0kbI/+uR402yRyekYi0kyXq4nz6NWN96822Q+I+v5venWrLd+GWXJDXJ4dsc+la3HbG565ajQwgzN1N/JXdM0f1xlUlRlN UoYyeN3D BMaix2sdfP0zhVYQI3yqoM0v9mDDepKUXCGqcp8EyZKnXguTFM96N7fQnI9nC/wcGZbtZ+dXSAnwCkHUvCDlWS8cEXkBpdeu5H3felcIprrag7iaHK7/GNBz1TV/utKhRQDG9ltmJNpcXS+970bOWxBXUoBGVY+BacUTQnTPIoHrfzTWmJZvQi7oF7SVPI+4Y21UV0t04ce2ZA9hHPwtYZS4Wu9Tcu67NCupsvq4kS4N4XJE11sVI63qKqataX80cc1FIJ/i0LI2wVRr1G9lE2sS7A0Ua/OpHVDOEoU1k1NYIrlDcznmCqvehD7KrnKDJuUAnDzGoam/txhkflVWFiaWBFQ== 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, Jul 19, 2024 at 08:50:41PM -0700, David Rientjes wrote: > On Fri, 19 Jul 2024, Kees Cook wrote: > > > diff --git a/include/linux/slab.h b/include/linux/slab.h > > index 7247e217e21b..3817554f2d51 100644 > > --- a/include/linux/slab.h > > +++ b/include/linux/slab.h > > @@ -665,6 +665,44 @@ static __always_inline __alloc_size(1) void *kmalloc_noprof(size_t size, gfp_t f > > } > > #define kmalloc(...) alloc_hooks(kmalloc_noprof(__VA_ARGS__)) > > > > +#define __alloc_obj3(ALLOC, P, COUNT, FLAGS) \ > > +({ \ > > + size_t __obj_size = size_mul(sizeof(*P), COUNT); \ > > + void *__obj_ptr; \ > > + (P) = __obj_ptr = ALLOC(__obj_size, FLAGS); \ > > + if (!__obj_ptr) \ > > + __obj_size = 0; \ > > + __obj_size; \ > > +}) > > + > > +#define __alloc_obj2(ALLOC, P, FLAGS) __alloc_obj3(ALLOC, P, 1, FLAGS) > > + > > +#define __alloc_obj4(ALLOC, P, FAM, COUNT, FLAGS) \ > > +({ \ > > + size_t __obj_size = struct_size(P, FAM, COUNT); \ > > + void *__obj_ptr; \ > > + (P) = __obj_ptr = ALLOC(__obj_size, FLAGS); \ > > + if (!__obj_ptr) \ > > + __obj_size = 0; \ > > + __obj_size; \ > > +}) > > + > > +#define kmalloc_obj(...) \ > > + CONCATENATE(__alloc_obj, \ > > + COUNT_ARGS(__VA_ARGS__))(kmalloc, __VA_ARGS__) > > + > > +#define kzalloc_obj(...) \ > > + CONCATENATE(__alloc_obj, \ > > + COUNT_ARGS(__VA_ARGS__))(kzalloc, __VA_ARGS__) > > + > > +#define kvmalloc_obj(...) \ > > + CONCATENATE(__alloc_obj, \ > > + COUNT_ARGS(__VA_ARGS__))(kvmalloc, __VA_ARGS__) > > + > > +#define kvzalloc_obj(...) \ > > + CONCATENATE(__alloc_obj, \ > > + COUNT_ARGS(__VA_ARGS__))(kvzalloc, __VA_ARGS__) > > + > > static __always_inline __alloc_size(1) void *kmalloc_node_noprof(size_t size, gfp_t flags, int node) > > { > > if (__builtin_constant_p(size) && size) { > > I'm supportive of this especially because it will pave a pathway toward > future hardening work. Request: could we get an addition to Thanks! > Documentation/ that explains how common idioms today can be converted to > these new macros for future users? The above makes sense only when > accompanied by your commit description :) Oh, yes. Very good point! I will figure out a place to add this. I'm not sure if kerndoc would be best here. -- Kees Cook