linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Przemek Kitszel <przemyslaw.kitszel@intel.com>
To: Linus Torvalds <torvalds@linux-foundation.org>,
	Kees Cook <kees@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>,
	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>,
	Roman Gushchin <roman.gushchin@linux.dev>,
	Hyeonggon Yoo <42.hyeyoo@gmail.com>,
	"Gustavo A . R . Silva" <gustavoars@kernel.org>,
	"Bill Wendling" <morbo@google.com>,
	Justin Stitt <justinstitt@google.com>,
	Jann Horn <jannh@google.com>, Marco Elver <elver@google.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Sasha Levin <sashal@kernel.org>, <linux-mm@kvack.org>,
	Randy Dunlap <rdunlap@infradead.org>,
	Miguel Ojeda <ojeda@kernel.org>,
	Matthew Wilcox <willy@infradead.org>,
	Vegard Nossum <vegard.nossum@oracle.com>,
	Harry Yoo <harry.yoo@oracle.com>,
	"Nathan Chancellor" <nathan@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	"Nick Desaulniers" <nick.desaulniers+lkml@gmail.com>,
	Jonathan Corbet <corbet@lwn.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Yafang Shao <laoar.shao@gmail.com>,
	Tony Ambardar <tony.ambardar@gmail.com>,
	"Alexander Lobakin" <aleksander.lobakin@intel.com>,
	Jan Hendrik Farr <kernel@jfarr.cc>,
	Alexander Potapenko <glider@google.com>,
	<linux-kernel@vger.kernel.org>, <linux-hardening@vger.kernel.org>,
	<linux-doc@vger.kernel.org>, <llvm@lists.linux.dev>
Subject: Re: [PATCH v5 2/4] slab: Introduce kmalloc_obj() and family
Date: Mon, 1 Dec 2025 11:49:16 +0100	[thread overview]
Message-ID: <fafb77fa-0615-4404-b976-be1a5496a96f@intel.com> (raw)
In-Reply-To: <CAHk-=wh7jG7vUqY2JjkJmjxOYzXR+iUARN6W908pCVfmyprSvg@mail.gmail.com>

> Doing
> 
>          size = struct_size(ptr, flex_member, count);
>          ptr = kmalloc(size, gfp);
> 
> is basically two fairly straightforward things and easy to understand.
> You can *scan* that code, and each piece is simple enough that it
> makes intuitive sense.
> 
> No, 'struct_size()' isn't exactly a very intuitive thing, but written
> that way it's also not very surprising or complicated to parse at a
> glance.
> 
> In contrast,
> 
>          ptr = kmalloc_flex_sz(*ptr, flex_member, count, gfp, &size);
> 
> does *not* make intuitive sense, I believe. Now you have five
> different arguments, and it's actually somewhat hard to parse, and
> there are odd semantics.
> 
> In contrast, the simple versions that take
> 
>          ptr = kmalloc(sizeof(*ptr), gfp);
> 
> and turn it into
> 
>          ptr = kmalloc_obj(*ptr, gfp);
> 
> actually become *simpler* to read and understand.
> 
> Yes, there are some other advantages to the combined version (ie that
> whole thing where 'kmalloc_obj()' now returns a proper _type_ - type
> safety is always good, and avoiding void pointers is a real thing),
> but I do think that the major advantage is "simpler to read".
> 
> Because in the end, simple code that does what you intuitively expect
> it to do, is good code, and hopefully less buggy.
> 
>               Linus

what about below interface:
	ptr = kmalloc_flex(*ptr, member, count, gfp);
	size = kmalloc_flex_get_size(ptr);

so, users that don't care about size would not need to read or store it

but those that need the size (likely to pass the whole struct via some
generic interface) will simply ask for it

note that there are some caveats, like user could add something like
	ptr->count++;
to destroy naive implementation for kmalloc_flex_get_size() above,
but we don't need to make knee shooting any less painful

another note, there is ksize(), and if we would like to waste some more
for actual size asked (as opposed to allocated), there could be a proper
function (instead of the macro that will work only when user not messing
with conventions) for kmalloc_flex_get_size()



  reply	other threads:[~2025-12-01 10:49 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-22  1:42 [PATCH v5 0/4] " Kees Cook
2025-11-22  1:42 ` [PATCH v5 1/4] compiler_types: Introduce __flex_counter() " Kees Cook
2025-11-22  1:42 ` [PATCH v5 2/4] slab: Introduce kmalloc_obj() " Kees Cook
2025-11-22 19:53   ` Linus Torvalds
2025-11-22 20:54     ` Linus Torvalds
2025-11-25 18:56       ` Vlastimil Babka
2025-11-25 22:41         ` Linus Torvalds
2025-11-24 20:38     ` Kees Cook
2025-11-24 21:12       ` Matthew Wilcox
2025-11-24 21:20         ` Kees Cook
2025-11-24 21:33           ` Matthew Wilcox
2025-11-24 21:44           ` Matthew Wilcox
2025-11-24 21:50             ` Kees Cook
2025-11-24 23:30             ` Linus Torvalds
2025-11-25  1:09               ` Matthew Wilcox
2025-11-25  3:47                 ` Kees Cook
2025-11-25 11:54                 ` david laight
2025-11-26  0:49                 ` John Hubbard
2025-11-24 21:35       ` Linus Torvalds
2025-11-25  0:29         ` Kees Cook
2025-11-25  1:25           ` Linus Torvalds
2025-12-01 10:49             ` Przemek Kitszel [this message]
2025-11-22  1:42 ` [PATCH v5 3/4] checkpatch: Suggest kmalloc_obj family for sizeof allocations Kees Cook
2025-11-22  4:51   ` Joe Perches
2025-12-03 23:12     ` Kees Cook
2025-11-22  1:43 ` [PATCH v5 4/4] coccinelle: Add kmalloc_objs conversion script Kees Cook
2025-11-24 12:50   ` [cocci] " Markus Elfring

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=fafb77fa-0615-4404-b976-be1a5496a96f@intel.com \
    --to=przemyslaw.kitszel@intel.com \
    --cc=42.hyeyoo@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=aleksander.lobakin@intel.com \
    --cc=cl@linux.com \
    --cc=corbet@lwn.net \
    --cc=elver@google.com \
    --cc=glider@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=gustavoars@kernel.org \
    --cc=harry.yoo@oracle.com \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=jannh@google.com \
    --cc=justinstitt@google.com \
    --cc=kees@kernel.org \
    --cc=kernel@jfarr.cc \
    --cc=kuba@kernel.org \
    --cc=laoar.shao@gmail.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=llvm@lists.linux.dev \
    --cc=morbo@google.com \
    --cc=nathan@kernel.org \
    --cc=nick.desaulniers+lkml@gmail.com \
    --cc=ojeda@kernel.org \
    --cc=penberg@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=sashal@kernel.org \
    --cc=tony.ambardar@gmail.com \
    --cc=torvalds@linux-foundation.org \
    --cc=vbabka@suse.cz \
    --cc=vegard.nossum@oracle.com \
    --cc=willy@infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox