From ec42d3d56819688537ec7ee37ce97f695fb8e6d7 Mon Sep 17 00:00:00 2001 From: Ian Rogers Date: Wed, 28 Feb 2024 22:20:48 -0800 Subject: [PATCH] perf map: Fix map reference count issues The find will get the map, ensure puts are done on all paths. Signed-off-by: Ian Rogers Acked-by: Namhyung Kim Cc: Masami Hiramatsu Signed-off-by: Namhyung Kim Link: https://lore.kernel.org/r/20240229062048.558799-1-irogers@google.com --- tools/perf/util/maps.c | 14 +++++++------- tools/perf/util/probe-event.c | 4 +--- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/tools/perf/util/maps.c b/tools/perf/util/maps.c index 53aea6d2ef936..ce13145a9f8e8 100644 --- a/tools/perf/util/maps.c +++ b/tools/perf/util/maps.c @@ -611,14 +611,14 @@ struct symbol *maps__find_symbol(struct maps *maps, u64 addr, struct map **mapp) struct symbol *result = NULL; /* Ensure map is loaded before using map->map_ip */ - if (map != NULL && map__load(map) >= 0) { - if (mapp) - *mapp = map; - + if (map != NULL && map__load(map) >= 0) result = map__find_symbol(map, map__map_ip(map, addr)); - if (!mapp) - map__put(map); - } + + if (mapp) + *mapp = map; + else + map__put(map); + return result; } diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index be71abe8b9b0a..2a0ad9ecf0a20 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -2274,9 +2274,7 @@ static int find_perf_probe_point_from_map(struct probe_trace_point *tp, ret = pp->function ? 0 : -ENOMEM; out: - if (map && !is_kprobe) { - map__put(map); - } + map__put(map); return ret; }