On 9/16/21 14:39, Miaohe Lin wrote: > When sysfs_slab_add failed, we shouldn't call debugfs_slab_add() for s > because s will be freed soon. And slab_debugfs_fops will use s later > leading to a use-after-free. > > Fixes: 64dd68497be7 ("mm: slub: move sysfs slab alloc/free interfaces to debugfs") > Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> Reviewed-by: Vlastimil Babka <vbabka@xxxxxxx> > --- > mm/slub.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/mm/slub.c b/mm/slub.c > index bf1793fb4ce5..f3df0f04a472 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -4887,13 +4887,15 @@ int __kmem_cache_create(struct kmem_cache *s, slab_flags_t flags) > return 0; > > err = sysfs_slab_add(s); > - if (err) > + if (err) { > __kmem_cache_release(s); > + return err; > + } > > if (s->flags & SLAB_STORE_USER) > debugfs_slab_add(s); > > - return err; > + return 0; > } > > void *__kmalloc_track_caller(size_t size, gfp_t gfpflags, unsigned long caller) >