All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Arnaldo Carvalho de Melo" <acme@kernel.org>
Cc: linux-perf-users@vger.kernel.org
Subject: Re: [PATCH 06/12] perf symbol: Fall back to fetching the vmlinux by build ID
Date: Wed, 16 Sep 2026 12:05:54 +0000	[thread overview]
Message-ID: <20260916120554.A9BE11F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260916114740.48230-7-acme@kernel.org>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] perf symbol: NULL pointer dereference in trampoline map adjustment due to lock dropping
--

commit 54cc3e4d87729d86b17ea862346d56f11117f916
Author: Arnaldo Carvalho de Melo <acme@redhat.com>

    perf symbol: Fall back to fetching the vmlinux by build ID

    A profile recorded on a kernel that is no longer installed, be it
    because the machine was rebooted into a new kernel or because the
    profile is being processed on another machine, can't have its kernel
    symbols resolved. As a last resort, when the kernel symbols can't be
    found locally and the user didn't specify a kallsyms file, fetch the
    vmlinux keyed by the kernel build ID recorded in the perf.data file
    using the debuginfod client and use it for symbols.

> diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
> index 1d70c43bb24ee..ccb6217119416 100644
> --- a/tools/perf/util/symbol.c
> +++ b/tools/perf/util/symbol.c
[ ... ]
> @@ -2257,7 +2280,53 @@ static int dso__load_kernel_sym(struct dso *dso, struct map *map)
>  		pr_debug("Using %s for symbols\n", kallsyms_filename);
>  	free(kallsyms_allocated_filename);
>  
> -	if (err > 0 && !dso__is_kcore(dso)) {
> +	/*
> +	 * The kallsyms may be unavailable or restricted, e.g.
> +	 * /proc/kallsyms with kernel.perf_event_paranoid > 1, try to fetch
> +	 * the vmlinux keyed by the build ID using debuginfod as a last
> +	 * resort, honoring --ignore-vmlinux and --ignore-vmlinux_buildid
> +	 * like the other vmlinux sources above.
> +	 */
> +	if (err <= 0 && !user_kallsyms &&
> +	    !symbol_conf.ignore_vmlinux &&
> +	    !symbol_conf.ignore_vmlinux_buildid) {
> +		char *fetched_path = NULL;
> +
> +		/*
> +		 * dso__load() holds dso->lock while it calls us, and the
> +		 * fetch below can take a long time, blocked on the network
> +		 * or on the terminal, waiting for the user: do it with the
> +		 * lock dropped, as dso__debuginfo() does for the debuginfo
> +		 * of a DSO, so that the threads that need this dso don't get
> +		 * stuck behind a server round trip.  Nothing of the dso is
> +		 * touched by the fetch, the symbols are loaded with the lock
> +		 * held again, and only if the fetch brought a file back.
> +		 */
> +		mutex_unlock(dso__lock(dso));
> +		err = dso__fetch_vmlinux_build_id(dso, &fetched_path);
> +		mutex_lock(dso__lock(dso));

[Severity: Medium]
Could dropping the lock here lead to a race condition that causes a NULL
pointer dereference?

If a second thread enters dso__load() while the lock is dropped here, it
would see dso__loaded(dso) is still false and also enter
dso__load_kernel_sym(). Both threads would eventually return and
consecutively call machine__map_x86_64_entry_trampolines().

Since machine__map_x86_64_entry_trampolines_cb() translates map->pgoff
in place without idempotency guarantees:

tools/perf/util/machine.c:machine__map_x86_64_entry_trampolines_cb()
    dest_map = maps__find(args->kmaps, map__pgoff(map));
    if (RC_CHK_ACCESS(dest_map) != RC_CHK_ACCESS(map))
        map__set_pgoff(map, map__map_ip(dest_map, map__pgoff(map)));

Would the second execution fail to find dest_map due to the modified
pgoff, and subsequently pass NULL to map__map_ip(), resulting in a
fatal NULL pointer dereference?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260916114740.48230-1-acme@kernel.org?part=6

  reply	other threads:[~2026-09-16 12:05 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-16 11:47 [PATCH v6 0/12] perf tools: Annotate fixes, stdio progress indication, debuginfo-client in more places Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 01/12] perf test: Skip data_type_profiling when the PMU cannot record memory events Arnaldo Carvalho de Melo
2026-09-16 11:53   ` sashiko-bot
2026-09-16 11:47 ` [PATCH 02/12] perf debuginfo: Fetch debuginfo keyed by build ID using debuginfod Arnaldo Carvalho de Melo
2026-09-16 11:57   ` sashiko-bot
2026-09-16 17:59   ` Ian Rogers
2026-09-16 19:02     ` Arnaldo Carvalho de Melo
2026-09-16 21:28       ` Ian Rogers
2026-09-16 18:42   ` Namhyung Kim
2026-09-16 11:47 ` [PATCH 03/12] perf config: Move perf_config__set_variable() to util/config.c Arnaldo Carvalho de Melo
2026-09-16 12:01   ` sashiko-bot
2026-09-16 11:47 ` [PATCH 04/12] perf debuginfo: Let the user skip and disable debuginfod fetches Arnaldo Carvalho de Melo
2026-09-16 11:59   ` sashiko-bot
2026-09-16 18:53   ` Namhyung Kim
2026-09-16 21:27     ` Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 05/12] perf debuginfo: Show the debuginfod fetch progress and keys in the TUI Arnaldo Carvalho de Melo
2026-09-16 12:00   ` sashiko-bot
2026-09-16 11:47 ` [PATCH 06/12] perf symbol: Fall back to fetching the vmlinux by build ID Arnaldo Carvalho de Melo
2026-09-16 12:05   ` sashiko-bot [this message]
2026-09-16 11:47 ` [PATCH 07/12] perf annotate-data: Show the sample count in the data-type browser Arnaldo Carvalho de Melo
2026-09-16 11:55   ` sashiko-bot
2026-09-16 21:28   ` Namhyung Kim
2026-09-22 12:52     ` Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 08/12] perf report: Add --progress option Arnaldo Carvalho de Melo
2026-09-16 11:57   ` sashiko-bot
2026-09-16 11:47 ` [PATCH 09/12] perf scripts: Add perf-stuck, to tell where a running perf is stuck Arnaldo Carvalho de Melo
2026-09-16 12:00   ` sashiko-bot
2026-09-16 11:47 ` [PATCH 10/12] perf annotate-data: Resolve type DIEs in the debug file they came from Arnaldo Carvalho de Melo
2026-09-16 12:01   ` sashiko-bot
2026-09-16 21:44   ` Namhyung Kim
2026-09-17 14:07     ` Arnaldo Carvalho de Melo
2026-09-16 11:47 ` [PATCH 11/12] perf mem record: Request PERF_SAMPLE_CPU by default Arnaldo Carvalho de Melo
2026-09-16 12:06   ` sashiko-bot
2026-09-16 21:50   ` Namhyung Kim
2026-09-16 11:47 ` [PATCH 12/12] perf mem record: Use the IBS swfilt filter when available Arnaldo Carvalho de Melo
2026-09-16 12:00   ` sashiko-bot
2026-09-16 21:59   ` Namhyung Kim
2026-09-18  3:35     ` Ravi Bangoria
2026-09-18 15:44       ` Arnaldo Carvalho de Melo
2026-09-19  2:38         ` Ravi Bangoria
2026-09-16 22:27 ` [PATCH v6 0/12] perf tools: Annotate fixes, stdio progress indication, debuginfo-client in more places Namhyung Kim
2026-09-17  9:04   ` Arnaldo Melo
  -- strict thread matches above, loose matches on Subject: below --
2026-09-16 18:32 Arnaldo Carvalho de Melo
2026-09-16 18:32 ` [PATCH 06/12] perf symbol: Fall back to fetching the vmlinux by build ID Arnaldo Carvalho de Melo
2026-09-16 18:47   ` 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=20260916120554.A9BE11F000FF@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=acme@kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.