mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
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 <irogers@google.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Signed-off-by: Namhyung Kim <namhyung@kernel.org> Link: https://lore.kernel.org/r/20240229062048.558799-1-irogers@google.com
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user