From: sashiko-bot@kernel.org
To: "Ian Rogers" <irogers@google.com>
Cc: linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v7 5/6] perf annotate: Be robust to annotating without a thread
Date: Thu, 23 Jul 2026 05:34:36 +0000 [thread overview]
Message-ID: <20260723053436.D048A1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260723045949.988740-6-irogers@google.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The patch actively introduces a silent fallback to the host architecture for userspace maps, defeating its stated purpose.
- [Medium] Returning a positive error code (ENOTSUP) from hist_entry__annotate_printf causes the caller to misinterpret the error as a valid count of filtered lines.
--
--- Patch [5]: [PATCH v7 5/6] perf annotate: Be robust to annotating without a thread ---
commit fcda5c254c589dfc6e3daa2b89d76183be5ba280
Author: Ian Rogers <irogers@google.com>
perf annotate: Be robust to annotating without a thread
This commit attempts to improve architecture detection for map symbols when
a thread isn't provided. It implements fallbacks using the DSO ELF header
and kmaps to avoid incorrectly falling back to the host architecture during
cross-platform analysis.
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index 53b2a224b21df..df70e95a84704 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
[ ... ]
> @@ -982,24 +982,43 @@ void symbol__calc_percent(struct symbol *sym, struct evsel *evsel)
[ ... ]
> + if (ms->thread) {
> + machine = maps__machine(thread__maps(ms->thread));
> + e_machine = thread__e_machine(ms->thread, machine, &e_flags);
> + if (machine && machine->env)
> + cpuid = machine->env->cpuid;
> + } else if (dso) {
> + struct maps *kmaps = (map && dso__kernel(dso)) ? map__kmaps(map) : NULL;
> + struct machine *kmap_machine = kmaps ? maps__machine(kmaps) : NULL;
> +
> + e_machine = dso__e_machine(dso, kmap_machine, &e_flags);
> + if (kmap_machine && kmap_machine->env)
> + cpuid = kmap_machine->env->cpuid;
> }
>
> - machine = maps__machine(thread__maps(thread));
> - e_machine = thread__e_machine(thread, machine, &e_flags);
> - arch = arch__find(e_machine, e_flags, machine->env ? machine->env->cpuid : NULL);
> + if (e_machine == EM_NONE)
> + e_machine = thread__e_machine(NULL, NULL, &e_flags);
[Severity: High]
Does this code silently fall back to the host architecture, defeating the stated
purpose of the patch? The commit message mentions "perfectly preventing silent,
incorrect host fallbacks to uname()", but when a user-space DSO is missing or
uses JIT, dso__e_machine() might return EM_NONE. Passing NULL to
thread__e_machine() triggers the uname() fallback, which assigns EM_HOST and
could cause Capstone to disassemble using the wrong architecture instead of
correctly aborting.
> +
> + arch = arch__find(e_machine, e_flags, cpuid);
> if (arch == NULL) {
[ ... ]
> @@ -1251,6 +1270,11 @@ int hist_entry__annotate_printf(struct hist_entry *he, struct evsel *evsel)
> evsel_name = buf;
> }
>
> + if (map_symbol__get_arch(ms, &apd.arch)) {
> + free(filename);
> + return ENOTSUP;
[Severity: Medium]
Will returning a positive error code (ENOTSUP) here cause the caller to
misinterpret the error as a valid count of filtered lines?
perf_top__show_details() interprets any positive return value from
hist_entry__annotate_printf() as the number of lines filtered out, incorrectly
printing '95 lines not displayed' rather than handling the failure. Should this
return a negative error code like -ENOTSUP?
> + }
> +
> graph_dotted_len = printf(" %-*.*s| Source code & Disassembly of %s for %s (%" PRIu64 " samples, "
> "percent: %s)\n",
> width, width, symbol_conf.show_total_period ? "Period" :
> diff --git a/tools/perf/util/capstone.c b/tools/perf/util/capstone.c
> index 00e0141cae8db..74213daf87862 100644
> --- a/tools/perf/util/capstone.c
> +++ b/tools/perf/util/capstone.c
[ ... ]
> @@ -423,9 +423,22 @@ int symbol__disassemble_capstone(const char *filename, struct symbol *sym,
> !strcmp(args->options->disassembler_style, "att"))
> disassembler_style = true;
>
> - e_machine = thread__e_machine_endian(args->ms->thread,
> - /*machine=*/NULL,
> - /*e_flags=*/NULL, &is_big_endian);
> + if (args->ms->thread) {
> + e_machine = thread__e_machine_endian(args->ms->thread,
> + /*machine=*/NULL,
> + /*e_flags=*/NULL, &is_big_endian);
> + } else if (dso) {
> + struct maps *kmaps = (map && dso__kernel(dso)) ? map__kmaps(map) : NULL;
> + struct machine *kmap_machine = kmaps ? maps__machine(kmaps) : NULL;
> +
> + e_machine = dso__e_machine_endian(dso, kmap_machine, /*e_flags=*/NULL,
> + &is_big_endian);
> + }
> + if (!e_machine || e_machine == EM_NONE) {
> + e_machine = thread__e_machine_endian(NULL,
> + /*machine=*/NULL,
> + /*e_flags=*/NULL, &is_big_endian);
[Severity: High]
Does this code also silently fall back to the host architecture here? Similar to
map_symbol__get_arch(), passing NULL to thread__e_machine_endian() results in
using the host architecture instead of aborting properly when annotating
cross-platform perf.data files.
> + }
> if (capstone_init(e_machine, &handle, is_64bit, is_big_endian, disassembler_style) < 0)
> goto err;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260723045949.988740-1-irogers@google.com?part=5
next prev parent reply other threads:[~2026-07-23 5:34 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-08 23:46 [PATCH v1 1/3] perf ui hists: In report UI ensure thread is set Ian Rogers
2026-07-08 23:46 ` [PATCH v1 2/3] perf ui hists: Remove duplicated thread in popup_action Ian Rogers
2026-07-08 23:58 ` sashiko-bot
2026-07-08 23:46 ` [PATCH v1 3/3] perf annotate: Be robust to annotating without a thread Ian Rogers
2026-07-08 23:58 ` sashiko-bot
2026-07-09 3:36 ` [PATCH v2 1/4] perf ui hists: In report UI ensure thread is set Ian Rogers
2026-07-09 3:36 ` [PATCH v2 2/4] perf ui hists: Remove duplicated thread in popup_action Ian Rogers
2026-07-09 3:52 ` sashiko-bot
2026-07-09 3:37 ` [PATCH v2 3/4] perf annotate: Be robust to annotating without a thread Ian Rogers
2026-07-09 3:57 ` sashiko-bot
2026-07-09 3:37 ` [PATCH v2 4/4] perf hists browser: Increase MAX_OPTIONS to prevent stack buffer overflow Ian Rogers
2026-07-09 3:52 ` sashiko-bot
2026-07-09 3:54 ` [PATCH v2 1/4] perf ui hists: In report UI ensure thread is set sashiko-bot
2026-07-09 16:52 ` [PATCH v3 " Ian Rogers
2026-07-09 16:52 ` [PATCH v3 2/4] perf ui hists: Remove duplicated thread in popup_action Ian Rogers
2026-07-09 17:10 ` sashiko-bot
2026-07-09 16:52 ` [PATCH v3 3/4] perf annotate: Be robust to annotating without a thread Ian Rogers
2026-07-09 17:04 ` sashiko-bot
2026-07-09 16:52 ` [PATCH v3 4/4] perf hists browser: Increase MAX_OPTIONS to prevent stack buffer overflow Ian Rogers
2026-07-09 17:08 ` sashiko-bot
2026-07-09 17:08 ` [PATCH v3 1/4] perf ui hists: In report UI ensure thread is set sashiko-bot
2026-07-10 2:49 ` [PATCH v4 1/9] perf hists browser: Increase MAX_OPTIONS to prevent stack buffer overflow Ian Rogers
2026-07-10 2:49 ` [PATCH v4 2/9] perf ui hists: In report UI ensure thread is set Ian Rogers
2026-07-10 3:05 ` sashiko-bot
2026-07-10 2:49 ` [PATCH v4 3/9] perf disasm: Fix potential NULL pointer dereference in arch__find() Ian Rogers
2026-07-10 2:59 ` sashiko-bot
2026-07-10 2:49 ` [PATCH v4 4/9] perf ui hists: Fix uninitialized stack memory free on pstack allocation failure Ian Rogers
2026-07-10 3:09 ` sashiko-bot
2026-07-10 2:49 ` [PATCH v4 5/9] perf ui hists: Fix memory leak in evsel__hists_browse() interactive loop Ian Rogers
2026-07-10 3:05 ` sashiko-bot
2026-07-10 2:49 ` [PATCH v4 6/9] perf ui hists: Fix dso_filter reference leak and exit cleanup Ian Rogers
2026-07-10 3:07 ` sashiko-bot
2026-07-10 2:49 ` [PATCH v4 7/9] perf ui hists: Fix NULL pointer array gap in add_script_opt() Ian Rogers
2026-07-10 2:49 ` [PATCH v4 8/9] perf ui hists: Remove duplicated thread in popup_action Ian Rogers
2026-07-10 3:09 ` sashiko-bot
2026-07-10 2:49 ` [PATCH v4 9/9] perf annotate: Be robust to annotating without a thread Ian Rogers
2026-07-10 3:17 ` sashiko-bot
2026-07-10 3:06 ` [PATCH v4 1/9] perf hists browser: Increase MAX_OPTIONS to prevent stack buffer overflow sashiko-bot
2026-07-10 5:36 ` [PATCH v5 01/10] " Ian Rogers
2026-07-10 5:36 ` [PATCH v5 02/10] perf ui hists: Fix uninitialized stack memory free on pstack allocation failure Ian Rogers
2026-07-10 5:55 ` sashiko-bot
2026-07-10 5:36 ` [PATCH v5 03/10] perf ui hists: Include limits.h for PATH_MAX definition Ian Rogers
2026-07-10 5:36 ` [PATCH v5 04/10] perf ui hists: Fix stack use-after-return in symbol_filter_str Ian Rogers
2026-07-10 5:59 ` sashiko-bot
2026-07-10 5:36 ` [PATCH v5 05/10] perf disasm: Fix potential NULL pointer dereference and use-after-free in arch__find() Ian Rogers
2026-07-10 5:36 ` [PATCH v5 06/10] perf ui hists: Fix NULL pointer array gap in add_script_opt() Ian Rogers
2026-07-10 5:56 ` sashiko-bot
2026-07-10 5:36 ` [PATCH v5 07/10] perf ui hists: In report UI ensure thread is set with reference counting Ian Rogers
2026-07-10 5:54 ` sashiko-bot
2026-07-10 5:36 ` [PATCH v5 08/10] perf ui hists: Remove duplicated thread in popup_action Ian Rogers
2026-07-10 5:54 ` sashiko-bot
2026-07-10 5:36 ` [PATCH v5 09/10] perf ui hists: Fix dso_filter reference leak and exit zoom cleanup Ian Rogers
2026-07-10 5:58 ` sashiko-bot
2026-07-10 5:36 ` [PATCH v5 10/10] perf annotate: Be robust to annotating without a thread Ian Rogers
2026-07-10 6:08 ` sashiko-bot
2026-07-10 5:54 ` [PATCH v5 01/10] perf hists browser: Increase MAX_OPTIONS to prevent stack buffer overflow sashiko-bot
2026-07-16 7:23 ` [PATCH v6 " Ian Rogers
2026-07-16 7:23 ` [PATCH v6 02/10] perf ui hists: Fix uninitialized stack memory free on pstack allocation failure Ian Rogers
2026-07-16 7:40 ` sashiko-bot
2026-07-16 7:23 ` [PATCH v6 03/10] perf ui hists: Include limits.h for PATH_MAX definition Ian Rogers
2026-07-16 7:23 ` [PATCH v6 04/10] perf ui hists: Fix stack use-after-return in symbol_filter_str Ian Rogers
2026-07-16 7:48 ` sashiko-bot
2026-07-18 5:38 ` Namhyung Kim
2026-07-16 7:23 ` [PATCH v6 05/10] perf disasm: Fix potential NULL pointer dereference and use-after-free in arch__find() Ian Rogers
2026-07-16 7:40 ` sashiko-bot
2026-07-16 7:23 ` [PATCH v6 06/10] perf ui hists: Fix NULL pointer array gap in add_script_opt() Ian Rogers
2026-07-16 7:39 ` sashiko-bot
2026-07-16 7:23 ` [PATCH v6 07/10] perf ui hists: In report UI ensure thread is set with reference counting Ian Rogers
2026-07-16 7:35 ` sashiko-bot
2026-07-16 7:23 ` [PATCH v6 08/10] perf ui hists: Remove duplicated thread in popup_action Ian Rogers
2026-07-16 7:37 ` sashiko-bot
2026-07-18 5:38 ` Namhyung Kim
2026-07-16 7:23 ` [PATCH v6 09/10] perf ui hists: Fix dso_filter reference leak and exit zoom cleanup Ian Rogers
2026-07-16 7:49 ` sashiko-bot
2026-07-16 7:23 ` [PATCH v6 10/10] perf annotate: Be robust to annotating without a thread Ian Rogers
2026-07-16 7:51 ` sashiko-bot
2026-07-20 4:45 ` [PATCH v6 01/10] perf hists browser: Increase MAX_OPTIONS to prevent stack buffer overflow Namhyung Kim
2026-07-22 16:37 ` Ian Rogers
2026-07-23 4:59 ` [PATCH v7 0/6] perf ui hists / annotate: Remaining fixes for reference counting and annotation Ian Rogers
2026-07-23 4:59 ` [PATCH v7 1/6] perf ui hists: Fix stack use-after-return in symbol_filter_str Ian Rogers
2026-07-23 5:17 ` sashiko-bot
2026-07-23 4:59 ` [PATCH v7 2/6] perf ui hists: Guard against NULL hist_entry in add_script_opt() Ian Rogers
2026-07-23 5:19 ` sashiko-bot
2026-07-23 4:59 ` [PATCH v7 3/6] perf ui hists: In report UI ensure thread is set with reference counting Ian Rogers
2026-07-23 4:59 ` [PATCH v7 4/6] perf ui hists: Fix dso_filter reference leak and exit zoom cleanup Ian Rogers
2026-07-23 4:59 ` [PATCH v7 5/6] perf annotate: Be robust to annotating without a thread Ian Rogers
2026-07-23 5:34 ` sashiko-bot [this message]
2026-07-23 4:59 ` [PATCH v7 6/6] perf ui hists: Remove duplicated thread in popup_action Ian Rogers
2026-07-23 5:32 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260723053436.D048A1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=irogers@google.com \
--cc=linux-perf-users@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox