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 v2 2/8] perf debuginfo: Fetch debuginfo keyed by build ID using debuginfod
Date: Sun, 13 Sep 2026 03:36:50 +0000	[thread overview]
Message-ID: <20260913033651.5686D1F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260913032632.116277-3-acme@kernel.org>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] Time-of-Check to Time-of-Use (TOCTOU) race condition in debuginfo__find_build_id() leading to redundant network fetches and memory leaks.
--

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

perf debuginfo: Fetch debuginfo keyed by build ID using debuginfod

This commit introduces the ability to fetch debuginfo keyed by build ID
using the debuginfod client when it is not found locally. It adds mechanisms
for progress indication, user cancellation, and caching misses to prevent
repeated network fetches.

> diff --git a/tools/perf/util/debuginfo.c b/tools/perf/util/debuginfo.c
> index 84a78b30ceac1..6f3023c96375c 100644
> --- a/tools/perf/util/debuginfo.c
> +++ b/tools/perf/util/debuginfo.c
[ ... ]
> @@ -139,6 +149,443 @@ struct debuginfo *debuginfo__new(const char *path)
[ ... ]
> +int debuginfo__find_build_id(const struct build_id *bid, char **path)
> +{
> +	int err;
> +
> +	*path = NULL;
> +
> +	if (!build_id__is_defined(bid) || !symbol_conf.debuginfod)
> +		return -1;
> +
> +	if (debuginfod__cache_disabled()) {
> +		pr_debug("Build-id cache disabled (buildid dir is '%s'), not using debuginfod\n",
> +			 buildid_dir);
> +		return -1;
> +	}
> +
> +	if (debuginfod__missed(bid)) {
> +		char sbuild_id[SBUILD_ID_SIZE];
> +
> +		build_id__snprintf(bid, sbuild_id, sizeof(sbuild_id));
> +		pr_debug("Not searching build ID %s in debuginfod again, it was a miss earlier\n",
> +			 sbuild_id);
> +		return -1;
> +	}
> +
> +	debuginfod__fetch_lock_init();
> +	mutex_lock(&debuginfod__fetch_lock);
> +	err = debuginfod__fetch(bid, path);
> +	mutex_unlock(&debuginfod__fetch_lock);

[Severity: Medium]
Could this introduce a time-of-check to time-of-use (TOCTOU) race condition?

If two threads concurrently call debuginfo__find_build_id() for the same
build ID, both could check debuginfod__missed(bid) and symbol_conf.debuginfod
outside of debuginfod__fetch_lock. 

After the first thread acquires the lock, completes the fetch, and records a
miss (or processes a user cancellation), the second thread will acquire the
lock and unconditionally perform the same fetch again without re-evaluating
the conditions. This could lead to redundant blocking network requests,
ignored cancellation requests, and duplicate entries added to the
debuginfod__misses list.

> +
> +	return err;
> +}

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

  reply	other threads:[~2026-09-13  3:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-13  3:26 [PATCH v2 0/8] perf tools: Annotate fixes, stdio progress indication, debuginfo-client in more places Arnaldo Carvalho de Melo
2026-09-13  3:26 ` [PATCH v2 1/8] perf test: Skip data_type_profiling when the PMU cannot record memory events Arnaldo Carvalho de Melo
2026-09-13  3:31   ` sashiko-bot
2026-09-13  3:26 ` [PATCH v2 2/8] perf debuginfo: Fetch debuginfo keyed by build ID using debuginfod Arnaldo Carvalho de Melo
2026-09-13  3:36   ` sashiko-bot [this message]
2026-09-13 12:15     ` Arnaldo Melo
2026-09-13  3:26 ` [PATCH v2 3/8] perf symbol: Fall back to fetching the vmlinux by build ID Arnaldo Carvalho de Melo
2026-09-13  3:36   ` sashiko-bot
2026-09-13  3:26 ` [PATCH v2 4/8] perf annotate-data: Show the sample count in the data-type browser Arnaldo Carvalho de Melo
2026-09-13  3:34   ` sashiko-bot
2026-09-13  3:26 ` [PATCH v2 5/8] perf report: Add --progress option Arnaldo Carvalho de Melo
2026-09-13  3:35   ` sashiko-bot
2026-09-13  3:26 ` [PATCH v2 6/8] perf scripts: Add perf-stuck, to tell where a running perf is stuck Arnaldo Carvalho de Melo
2026-09-13  3:37   ` sashiko-bot
2026-09-13  3:26 ` [PATCH v2 7/8] perf annotate-data: Resolve type DIEs in the debug file they came from Arnaldo Carvalho de Melo
2026-09-13  3:38   ` sashiko-bot
2026-09-13  3:26 ` [PATCH v2 8/8] perf mem record: Request PERF_SAMPLE_CPU by default Arnaldo Carvalho de Melo
2026-09-13  3:42   ` 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=20260913033651.5686D1F00893@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.