This is a note to let you know that I've just added the patch titled perf dlfilter: Fix use of addr_location__exit() in dlfilter__object_code() to the 6.5-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: perf-dlfilter-fix-use-of-addr_location__exit-in-dlfilter__object_code.patch and it can be found in the queue-6.5 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 7a48b58eb5ff3798f0480d2da16bf27df9654fc7 Mon Sep 17 00:00:00 2001 From: Adrian Hunter <adrian.hunter@xxxxxxxxx> Date: Thu, 28 Sep 2023 10:16:05 +0300 Subject: perf dlfilter: Fix use of addr_location__exit() in dlfilter__object_code() From: Adrian Hunter <adrian.hunter@xxxxxxxxx> commit 7a48b58eb5ff3798f0480d2da16bf27df9654fc7 upstream. Stop calling addr_location__exit() when addr_location__init() was not called. Fixes: 0dd5041c9a0e ("perf addr_location: Add init/exit/copy functions") Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> Acked-by: Namhyung Kim <namhyung@xxxxxxxxxx> Link: https://lore.kernel.org/r/20230928071605.17624-1-adrian.hunter@xxxxxxxxx Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- tools/perf/util/dlfilter.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) --- a/tools/perf/util/dlfilter.c +++ b/tools/perf/util/dlfilter.c @@ -280,13 +280,21 @@ static struct perf_event_attr *dlfilter_ return &d->evsel->core.attr; } +static __s32 code_read(__u64 ip, struct map *map, struct machine *machine, void *buf, __u32 len) +{ + u64 offset = map__map_ip(map, ip); + + if (ip + len >= map__end(map)) + len = map__end(map) - ip; + + return dso__data_read_offset(map__dso(map), machine, offset, buf, len); +} + static __s32 dlfilter__object_code(void *ctx, __u64 ip, void *buf, __u32 len) { struct dlfilter *d = (struct dlfilter *)ctx; struct addr_location *al; struct addr_location a; - struct map *map; - u64 offset; __s32 ret; if (!d->ctx_valid) @@ -296,27 +304,17 @@ static __s32 dlfilter__object_code(void if (!al) return -1; - map = al->map; - - if (map && ip >= map__start(map) && ip < map__end(map) && + if (al->map && ip >= map__start(al->map) && ip < map__end(al->map) && machine__kernel_ip(d->machine, ip) == machine__kernel_ip(d->machine, d->sample->ip)) - goto have_map; + return code_read(ip, al->map, d->machine, buf, len); addr_location__init(&a); + thread__find_map_fb(al->thread, d->sample->cpumode, ip, &a); - if (!a.map) { - ret = -1; - goto out; - } - - map = a.map; -have_map: - offset = map__map_ip(map, ip); - if (ip + len >= map__end(map)) - len = map__end(map) - ip; - ret = dso__data_read_offset(map__dso(map), d->machine, offset, buf, len); -out: + ret = a.map ? code_read(ip, a.map, d->machine, buf, len) : -1; + addr_location__exit(&a); + return ret; } Patches currently in stable-queue which might be from adrian.hunter@xxxxxxxxx are queue-6.5/mmc-core-sdio-hold-retuning-if-sdio-in-1-bit-mode.patch queue-6.5/perf-dlfilter-fix-use-of-addr_location__exit-in-dlfilter__object_code.patch queue-6.5/mmc-sdhci-pci-gli-fix-lpm-negotiation-so-x86-s0ix-socs-can-suspend.patch