Hi Masami, On Thu, 2026-05-21 at 13:49 +0900, Masami Hiramatsu (Google) wrote: > From: Masami Hiramatsu (Google) <[email protected]> > > In paths where tracing_map_elt_alloc() failed to allocate objects, > the map->ops->elt_alloc() call was never successful. In this case, > map->ops->elt_free() should not be called. > > This bug was found by Sashiko. > Link: https://sashiko.dev/#/patchset/20260520223101.34710-1-rosenp%40gmail.com > > Fixes: 2734b629525a ("tracing: Add per-element variable support to > tracing_map") > Signed-off-by: Masami Hiramatsu (Google) <[email protected]> > Cc: [email protected] > --- > kernel/trace/tracing_map.c | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > > diff --git a/kernel/trace/tracing_map.c b/kernel/trace/tracing_map.c > index bf1a507695b6..0dd7927df22a 100644 > --- a/kernel/trace/tracing_map.c > +++ b/kernel/trace/tracing_map.c > @@ -386,13 +386,11 @@ static void tracing_map_elt_init_fields(struct > tracing_map_elt *elt) > } > } > > -static void tracing_map_elt_free(struct tracing_map_elt *elt) > +static void __tracing_map_elt_free(struct tracing_map_elt *elt) > { > if (!elt) > return; > > - if (elt->map->ops && elt->map->ops->elt_free) > - elt->map->ops->elt_free(elt); > kfree(elt->fields); > kfree(elt->vars); > kfree(elt->var_set); > @@ -400,6 +398,17 @@ static void tracing_map_elt_free(struct tracing_map_elt > *elt) > kfree(elt); > } > > +static void tracing_map_elt_free(struct tracing_map_elt *elt) > +{ > + if (!elt) > + return; > + > + /* Only objects initialized with alloc_elt() should be passed to > free_elt().*/ > + if (elt->map->ops && elt->map->ops->elt_free) > + elt->map->ops->elt_free(elt); > + __tracing_map_elt_free(elt); > +} > + > static struct tracing_map_elt *tracing_map_elt_alloc(struct tracing_map *map) > { > struct tracing_map_elt *elt; > @@ -444,7 +453,7 @@ static struct tracing_map_elt > *tracing_map_elt_alloc(struct tracing_map *map) > } > return elt; > free: > - tracing_map_elt_free(elt); > + __tracing_map_elt_free(elt); > > return ERR_PTR(err); > } > >
Looks good to me. Thanks for fixing it! Reviewed-by: Tom Zanussi <[email protected]>
