Re: [PATCH] slub: print just the function name in /sys/kernel/slab/*/ctor

Harry Yoo <[email protected]> Sun, 2 Aug 2026 05:13:48 +0000
Newsgroups org.kvack.linux-mm
Message-ID <am7NCCxeg3BsoYSa@dev>
On Thu, Jul 30, 2026 at 04:15:26PM +0200, Vlastimil Babka (SUSE) wrote:
> On 7/27/26 07:27, Harry Yoo wrote:
> > 
> > 
> > On 7/25/26 10:28 PM, Alexey Dobriyan wrote:
> >> Sysfs "ctor" file prints offset/length of the cache's ctor function
> >> 
> >> 	$ sudo cat /sys/kernel/slab/bdev_cache/ctor
> >> 	init_once+0x0/0x10
> >> 
> >> This is not useful:
> >> 
> >> Offset will always be 0 because ctor is a function.
> >> 
> >> I'm not sure what ctor function size is doing here, it should be in
> >> /proc/kallsyms
> >> 
> >> Signed-off-by: Alexey Dobriyan <[email protected]>
> >> ---
> > 
> > I'm not convinced that changing this (without strong justification)
> > after exposing it to sysfs for 10+ years is worth the trouble.
> 
> Agreed. It's a pity this was exported in the first place. I can't see a
> benefit for anyone knowing what the function is called. Should have been at
> most a flag whether there's ctor or not.

Agreed.

> But possibly a justification is not to leak the function size, which might
> be theoretically (although unlikely) a hint to some attack.

...but you need to be the owner (root) to read this :P 

> Well at least if somebody complains about getting broken, it's trivial to
> revert and we can hear about their usecase.

If we were to experiment with this, we'll change it to print a flag
rather than the ctor's name, right?

> In-tree tools (slabinfo etc) were checked to work properly?

Looks like it doesn't read ctor at all.

Commit a87615b8f9e2 ("SLUB: slabinfo upgrade") added -o/--ops option
that should "Display of ctor / dtor etc.", but it reads "ops" attribute
that has never existed? Bit puzzled.

> >>  mm/slub.c |    2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >> 
> >> --- a/mm/slub.c
> >> +++ b/mm/slub.c
> >> @@ -9149,7 +9149,7 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
> >>  {
> >>  	if (!s->ctor)
> >>  		return 0;
> >> -	return sysfs_emit(buf, "%pS\n", s->ctor);
> >> +	return sysfs_emit(buf, "%ps\n", s->ctor);
> >>  }
> >>  SLAB_ATTR_RO(ctor);

-- 
Cheers,
Harry / Hyeonggon