mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
tracing: Do not call map->ops->elt_free() if elt_alloc() fails
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.
Link: https://sashiko.dev/#/patchset/20260520223101.34710-1-rosenp%40gmail.com
Cc: stable@vger.kernel.org
Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Rosen Penev <rosenp@gmail.com>
Reported-by: Sashiko <sashiko-bot@kernel.org>
Fixes: 2734b62952 ("tracing: Add per-element variable support to tracing_map")
Link: https://patch.msgid.link/177933895460.108746.5396070821443932634.stgit@devnote2
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
576ec047d2
commit
8f0f5c4fb9
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user