From: Kees Cook <kees@kernel.org>
To: Roman Gushchin <roman.gushchin@linux.dev>
Cc: Vlastimil Babka <vbabka@suse.cz>, Jann Horn <jannh@google.com>,
Tony Luck <tony.luck@intel.com>,
Nick Desaulniers <ndesaulniers@google.com>,
Miguel Ojeda <ojeda@kernel.org>, Marco Elver <elver@google.com>,
Nathan Chancellor <nathan@kernel.org>,
Hao Luo <haoluo@google.com>,
Przemek Kitszel <przemyslaw.kitszel@intel.com>,
Christoph Lameter <cl@linux.com>,
Pekka Enberg <penberg@kernel.org>,
David Rientjes <rientjes@google.com>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Andrew Morton <akpm@linux-foundation.org>,
Hyeonggon Yoo <42.hyeyoo@gmail.com>,
"Guilherme G. Piccoli" <gpiccoli@igalia.com>,
Mark Rutland <mark.rutland@arm.com>,
Jakub Kicinski <kuba@kernel.org>,
Petr Pavlu <petr.pavlu@suse.com>,
Alexander Lobakin <aleksander.lobakin@intel.com>,
Tony Ambardar <tony.ambardar@gmail.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-hardening@vger.kernel.org
Subject: Re: [RFC][PATCH 0/4] slab: Allow for type introspection during allocation
Date: Tue, 9 Jul 2024 11:57:19 -0700 [thread overview]
Message-ID: <202407091155.1D0D7584@keescook> (raw)
In-Reply-To: <Zo1sAhEEN8ep7XZg@google.com>
On Tue, Jul 09, 2024 at 04:57:38PM +0000, Roman Gushchin wrote:
> On Mon, Jul 08, 2024 at 12:18:34PM -0700, Kees Cook wrote:
> > Hi,
> >
> > This is an RFC for some changes I'd like to make to the kernel's
> > allocators (starting with slab) that allow for type introspection, which
> > has been a long-time gap in potential analysis capabilities available
> > at compile-time. The changes here are just a "first step" example that
> > updates kmalloc() and kzalloc() to show what I'm thinking we can do,
> > and shows an example conversion within the fs/pstore tree.
> >
> > Repeating patch 3's commit log here:
> >
> > There is currently no way for the slab to know what type is being
> > allocated, and this hampers the development of any logic that would need
> > this information including basic type checking, alignment need analysis,
> > etc.
> >
> > Allow the size argument to optionally be a variable, from which the
> > type (and there by the size, alignment, or any other features) can be
> > determined at compile-time. This allows for the incremental replacement
> > of the classic code pattern:
> >
> > obj = kmalloc(sizeof(*obj), gfp);
> >
> > into:
> >
> > obj = kmalloc(obj, gfp);
> >
> > As an additional build-time safety feature, the return value of kmalloc()
> > also becomes typed so that the assignment and first argument cannot drift,
> > doing away with the other, more fragile, classic code pattern:
> >
> > obj = kmalloc(sizeof(struct the_object), gfp);
> >
> > into:
> >
> > obj = kmalloc(obj, gfp);
>
> I like the idea, however it's not as simple and straightforward because
> it's common for structures to have a variable part (usually at the end)
> and also allocate more than one structure at once.
>
> There are many allocations which look like
> kmalloc(sizeof(my_struct) * 2 + SOME_MAGIC_LENGTH, GFP_...)
> or something like this, which you can't easily convert to your scheme.
Right -- and with this we can leave those as-is initially (since a size
argument will still work).
> The only option I see is to introduce the new set of functions/macros,
> something like kmalloc_obj() or kmalloc_struct(). Or maybe tmalloc()?
> (t for typed)
Yeah, in a neighboring thread I was talking about a kmalloc_obj that
would handle fixed-sized structs, flexible array structs, and arrays. I
need to prove out the array part, but the first two should be trivial to
implement.
--
Kees Cook
next prev parent reply other threads:[~2024-07-09 18:57 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-08 19:18 [RFC][PATCH 0/4] slab: Allow for type introspection during allocation Kees Cook
2024-07-08 19:18 ` [RFC][PATCH 1/4] compiler_types: Add integral/pointer type helper macros Kees Cook
2024-07-08 19:18 ` [RFC][PATCH 2/4] slab: Detect negative size values and saturate Kees Cook
2024-07-09 6:57 ` Przemek Kitszel
2024-07-09 16:09 ` Kees Cook
2024-07-08 19:18 ` [RFC][PATCH 3/4] slab: Allow for type introspection during allocation Kees Cook
2024-07-08 19:18 ` [RFC][PATCH 4/4] pstore: Replace classic kmalloc code pattern with typed argument Kees Cook
2024-07-09 7:06 ` Przemek Kitszel
2024-07-09 16:32 ` Kees Cook
2024-07-09 16:57 ` [RFC][PATCH 0/4] slab: Allow for type introspection during allocation Roman Gushchin
2024-07-09 18:57 ` Kees Cook [this message]
2024-07-09 17:26 ` Christoph Lameter (Ampere)
2024-07-09 20:28 ` Kees Cook
2024-07-09 21:02 ` Marco Elver
2024-07-09 23:28 ` Kees Cook
2024-07-10 4:42 ` Przemek Kitszel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202407091155.1D0D7584@keescook \
--to=kees@kernel.org \
--cc=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=aleksander.lobakin@intel.com \
--cc=cl@linux.com \
--cc=elver@google.com \
--cc=gpiccoli@igalia.com \
--cc=haoluo@google.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=jannh@google.com \
--cc=kuba@kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mark.rutland@arm.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=ojeda@kernel.org \
--cc=penberg@kernel.org \
--cc=petr.pavlu@suse.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=tony.ambardar@gmail.com \
--cc=tony.luck@intel.com \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.