All of lore.kernel.org
 help / color / mirror / Atom feed
From: Harry Yoo <harry.yoo@oracle.com>
To: Alexander Potapenko <glider@google.com>
Cc: akpm@linux-foundation.org, vbabka@suse.cz, andreyknvl@gmail.com,
	cl@gentwo.org, dvyukov@google.com, hannes@cmpxchg.org,
	linux-mm@kvack.org, mhocko@kernel.org, muchun.song@linux.dev,
	rientjes@google.com, roman.gushchin@linux.dev,
	ryabinin.a.a@gmail.com, shakeel.butt@linux.dev,
	surenb@google.com, vincenzo.frascino@arm.com,
	yeoreum.yun@arm.com, tytso@mit.edu, adilger.kernel@dilger.ca,
	linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org,
	cgroups@vger.kernel.org, hao.li@linux.dev,
	stable@vger.kernel.org
Subject: Re: [PATCH V5 1/8] mm/slab: use unsigned long for orig_size to ensure proper metadata align
Date: Fri, 9 Jan 2026 10:52:39 +0900	[thread overview]
Message-ID: <aWBfZ4ga9HQ8L8KM@hyeyoo> (raw)
In-Reply-To: <CAG_fn=XCx9-uYOhRQXTde7ud=H9kwM_Sf3ZjHQd9hfYDspzeOA@mail.gmail.com>

On Thu, Jan 08, 2026 at 12:39:22PM +0100, Alexander Potapenko wrote:
> On Mon, Jan 5, 2026 at 9:02 AM Harry Yoo <harry.yoo@oracle.com> wrote:
> >
> > When both KASAN and SLAB_STORE_USER are enabled, accesses to
> > struct kasan_alloc_meta fields can be misaligned on 64-bit architectures.
> > This occurs because orig_size is currently defined as unsigned int,
> > which only guarantees 4-byte alignment. When struct kasan_alloc_meta is
> > placed after orig_size, it may end up at a 4-byte boundary rather than
> > the required 8-byte boundary on 64-bit systems.
> >
> > Note that 64-bit architectures without HAVE_EFFICIENT_UNALIGNED_ACCESS
> > are assumed to require 64-bit accesses to be 64-bit aligned.
> > See HAVE_64BIT_ALIGNED_ACCESS and commit adab66b71abf ("Revert:
> > "ring-buffer: Remove HAVE_64BIT_ALIGNED_ACCESS"") for more details.
> >
> > Change orig_size from unsigned int to unsigned long to ensure proper
> > alignment for any subsequent metadata. This should not waste additional
> > memory because kmalloc objects are already aligned to at least
> > ARCH_KMALLOC_MINALIGN.
> >
> > Suggested-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
> > Cc: stable@vger.kernel.org
> > Fixes: 6edf2576a6cc ("mm/slub: enable debugging memory wasting of kmalloc")
> > Signed-off-by: Harry Yoo <harry.yoo@oracle.com>
> > ---
> >  mm/slub.c | 14 +++++++-------
> >  1 file changed, 7 insertions(+), 7 deletions(-)
> >
> > diff --git a/mm/slub.c b/mm/slub.c
> > index ad71f01571f0..1c747435a6ab 100644
> > --- a/mm/slub.c
> > +++ b/mm/slub.c
> > @@ -857,7 +857,7 @@ static inline bool slab_update_freelist(struct kmem_cache *s, struct slab *slab,
> >   * request size in the meta data area, for better debug and sanity check.
> >   */
> >  static inline void set_orig_size(struct kmem_cache *s,
> > -                               void *object, unsigned int orig_size)
> > +                               void *object, unsigned long orig_size)
> >  {
> >         void *p = kasan_reset_tag(object);
> >
> > @@ -867,10 +867,10 @@ static inline void set_orig_size(struct kmem_cache *s,
> >         p += get_info_end(s);
> >         p += sizeof(struct track) * 2;
> >
> > -       *(unsigned int *)p = orig_size;
> > +       *(unsigned long *)p = orig_size;
> 
> Instead of calculating the offset of the original size in several
> places, should we maybe introduce a function that returns a pointer to
> it?

Good point.

The calculation of various metadata offset (including the original size)
is repeated in several places, and perhaps it's worth cleaning up,
something like this:

enum {
  FREE_POINTER_OFFSET,
  ALLOC_TRACK_OFFSET,
  FREE_TRACK_OFFSET,
  ORIG_SIZE_OFFSET,
  KASAN_ALLOC_META_OFFSET,
  OBJ_EXT_OFFSET,
  FINAL_ALIGNMENT_PADDING_OFFSET,
  ...
};

orig_size = *(unsigned long *)get_metadata_ptr(p, ORIG_SIZE_OFFSET);

... of course, perhaps as a follow-up rather than
as part of this series.

-- 
Cheers,
Harry / Hyeonggon

  reply	other threads:[~2026-01-09  1:53 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-05  8:02 [PATCH V5 0/8] mm/slab: reduce slab accounting memory overhead by allocating slabobj_ext metadata within unsed slab space Harry Yoo
2026-01-05  8:02 ` [PATCH V5 1/8] mm/slab: use unsigned long for orig_size to ensure proper metadata align Harry Yoo
2026-01-07 11:43   ` Vlastimil Babka
2026-01-08  7:12     ` Harry Yoo
2026-01-08 11:39   ` Alexander Potapenko
2026-01-09  1:52     ` Harry Yoo [this message]
2026-01-09  9:30       ` Alexander Potapenko
2026-01-12  6:28         ` Harry Yoo
2026-01-05  8:02 ` [PATCH V5 2/8] mm/slab: allow specifying free pointer offset when using constructor Harry Yoo
2026-01-05  8:02 ` [PATCH V5 3/8] ext4: specify the free pointer offset for ext4_inode_cache Harry Yoo
2026-01-07 13:54   ` Vlastimil Babka
2026-01-08  7:14     ` Harry Yoo
2026-01-05  8:02 ` [PATCH V5 4/8] mm/slab: abstract slabobj_ext access via new slab_obj_ext() helper Harry Yoo
2026-01-07 14:53   ` Hao Li
2026-01-08  7:21     ` Harry Yoo
2026-01-07 14:56   ` Vlastimil Babka
2026-01-08  8:03     ` Harry Yoo
2026-01-05  8:02 ` [PATCH V5 5/8] mm/slab: use stride to access slabobj_ext Harry Yoo
2026-01-05  8:02 ` [PATCH V5 6/8] mm/memcontrol,alloc_tag: handle slabobj_ext access under KASAN poison Harry Yoo
2026-01-05  8:02 ` [PATCH V5 7/8] mm/slab: save memory by allocating slabobj_ext array from leftover Harry Yoo
2026-01-07 17:08   ` Vlastimil Babka
2026-01-05  8:02 ` [PATCH V5 8/8] mm/slab: place slabobj_ext metadata in unused space within s->size Harry Yoo
2026-01-07 17:33   ` Vlastimil Babka
2026-01-08  9:02     ` Harry Yoo
2026-01-08  5:52   ` Hao Li
2026-01-08  8:41     ` Harry Yoo
2026-01-08  9:52       ` Hao Li
2026-01-08 10:28         ` Harry Yoo
2026-01-08 10:44         ` Harry Yoo
2026-01-08 10:52           ` Vlastimil Babka
2026-01-08 12:48             ` Hao Li
2026-01-09  2:32             ` Harry Yoo
2026-01-08 11:57           ` Hao Li
2026-01-05  8:05 ` [PATCH V5 0/8] mm/slab: reduce slab accounting memory overhead by allocating slabobj_ext metadata within unsed slab space Harry Yoo
2026-01-07 17:43 ` Vlastimil Babka
2026-01-08  7:05   ` Harry Yoo

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=aWBfZ4ga9HQ8L8KM@hyeyoo \
    --to=harry.yoo@oracle.com \
    --cc=adilger.kernel@dilger.ca \
    --cc=akpm@linux-foundation.org \
    --cc=andreyknvl@gmail.com \
    --cc=cgroups@vger.kernel.org \
    --cc=cl@gentwo.org \
    --cc=dvyukov@google.com \
    --cc=glider@google.com \
    --cc=hannes@cmpxchg.org \
    --cc=hao.li@linux.dev \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=muchun.song@linux.dev \
    --cc=rientjes@google.com \
    --cc=roman.gushchin@linux.dev \
    --cc=ryabinin.a.a@gmail.com \
    --cc=shakeel.butt@linux.dev \
    --cc=stable@vger.kernel.org \
    --cc=surenb@google.com \
    --cc=tytso@mit.edu \
    --cc=vbabka@suse.cz \
    --cc=vincenzo.frascino@arm.com \
    --cc=yeoreum.yun@arm.com \
    /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.