From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
James Clark <james.clark@linaro.org>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Clark Williams <williams@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@kernel.org>
Subject: [PATCHES v1 00/15] perf tools: Fix pre-existing bugs in symbols, dso, bpf, sched, c2c, hwmon, and cs-etm
Date: Thu, 11 Jun 2026 21:34:28 -0300 [thread overview]
Message-ID: <20260612003444.50723-1-acme@kernel.org> (raw)
Hi,
Fifteen more pre-existing bugs found by sashiko-bot during AI-assisted
code review. All are independent of the perf-data-validation hardening
series -- they are latent bugs in surrounding code exposed during review.
The fixes are grouped by subsystem:
ELF/build-id parsing in the no-libelf path (patches 1-3):
symbol-minimal.c carries a copy-paste typo that byte-swaps p_offset
instead of p_filesz for 32-bit ELF. The ssize_t p_filesz value is
used without checking for negative, and sysfs__read_build_id() trusts
fstat() on sysfs pseudo-files that report incorrect sizes. Replaced
with a fixed stack buffer and single read(), matching symbol-elf.c.
ELF note iteration (patch 4):
sysfs__read_build_id() in the libelf path can loop forever when a
note section contains zero-filled entries (namesz + descsz == 0).
Break when no progress can be made.
DSO decompression and open (patches 5-6):
dso__get_filename() copies a decompressed path with strcpy() into a
potentially shorter heap buffer. filename__decompress() fails to set
the error code on the uncompressed fallback path, leaving callers
with a stale errno.
Buffer overflow in root_dir path construction (patch 7):
machine.c and symbol.c use sprintf() to build paths with root_dir,
which can overflow the fixed-size buffer. Switch to snprintf().
hwmon fd check (patch 8):
hwmon_pmu__describe_items() tests fd > 0, rejecting the valid fd 0.
Undefined behavior in perf sched (patch 9):
map__findnew_thread() uses (void*)1 as a sentinel for colored threads.
This value gets dereferenced as a struct pointer and passed to free()
on cleanup. Replace with a proper allocation and a boolean color flag.
BPF metadata validation (patches 10-12):
synthesize_bpf_prog_name() trusts func_info_rec_size and sub_id from
perf.data without validation. bpf_metadata_alloc() stores the event
size in a __u16 without overflow checking. bpil_offs_to_addr()
converts untrusted offsets to heap pointers without bounds checking.
Memory leak in c2c (patch 13):
c2c hist entries register format list entries but never unregister
them on free, leaking the list nodes.
O_NONBLOCK for untrusted paths (patch 14):
open() calls that process paths from perf.data events can hang on
FIFOs or device nodes planted by a crafted file. Add O_NONBLOCK as
defense-in-depth on these foreign file opens.
CoreSight ETM CPU ID validation (patch 15):
cs_etm__process_auxtrace_info_full() compares an unsigned CPU ID
from perf.data metadata against a signed int without range checking.
A large unsigned value wraps negative, bypassing the bounds check.
Build-tested with gcc and clang. Passes perf test on x86_64.
Arnaldo Carvalho de Melo (15):
perf symbols: Fix bswap copy-paste error for 32-bit ELF p_filesz
perf symbols: Validate p_filesz before use in filename__read_build_id()
perf symbols: Use fixed buffer in sysfs__read_build_id() for no-libelf build
perf symbols: Break infinite loop on zero-filled notes in sysfs__read_build_id()
perf dso: Fix heap overflow in dso__get_filename() on decompressed path
perf dso: Set error code when open() fails on uncompressed fallback path
perf tools: Use snprintf() for root_dir path construction
perf hwmon: Fix fd check to accept fd 0 in hwmon_pmu__describe_items()
perf sched: Replace (void*)1 sentinel with proper runtime allocation
perf bpf: Validate func_info_rec_size and sub_id in synthesize_bpf_prog_name()
perf bpf: Reject oversized BPF metadata events that truncate header.size
perf bpf: Bounds-check array offsets in bpil_offs_to_addr()
perf c2c: Free format list entries when releasing c2c hist entries
perf symbols: Add O_NONBLOCK to DSO open() calls for untrusted paths
perf cs-etm: Reject CPU IDs that would overflow signed comparison
tools/perf/builtin-c2c.c | 1 +
tools/perf/builtin-sched.c | 23 ++++++++++++-----
tools/perf/util/bpf-event.c | 13 +++++++++-
tools/perf/util/bpf-utils.c | 14 +++++++++++
tools/perf/util/cs-etm.c | 9 ++++++-
tools/perf/util/dso.c | 18 +++++++++++---
tools/perf/util/hwmon_pmu.c | 2 +-
tools/perf/util/machine.c | 2 +-
tools/perf/util/symbol-elf.c | 10 +++++---
tools/perf/util/symbol-minimal.c | 54 ++++++++++++++++++++++++----------------
tools/perf/util/symbol.c | 2 +-
11 files changed, 108 insertions(+), 40 deletions(-)
Developed with AI assistance (Claude/sashiko), tagged in commits.
Thanks,
- Arnaldo
next reply other threads:[~2026-06-12 0:34 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-12 0:34 Arnaldo Carvalho de Melo [this message]
2026-06-12 0:34 ` [PATCH 01/15] perf symbols: Fix bswap copy-paste error for 32-bit ELF p_filesz Arnaldo Carvalho de Melo
2026-06-12 0:34 ` [PATCH 02/15] perf symbols: Validate p_filesz before use in filename__read_build_id() Arnaldo Carvalho de Melo
2026-06-12 0:34 ` [PATCH 03/15] perf symbols: Use fixed buffer in sysfs__read_build_id() for no-libelf build Arnaldo Carvalho de Melo
2026-06-12 0:47 ` sashiko-bot
2026-06-12 0:34 ` [PATCH 04/15] perf symbols: Break infinite loop on zero-filled notes in sysfs__read_build_id() Arnaldo Carvalho de Melo
2026-06-12 0:34 ` [PATCH 05/15] perf dso: Fix heap overflow in dso__get_filename() on decompressed path Arnaldo Carvalho de Melo
2026-06-12 0:34 ` [PATCH 06/15] perf dso: Set error code when open() fails on uncompressed fallback path Arnaldo Carvalho de Melo
2026-06-12 0:54 ` sashiko-bot
2026-06-12 0:34 ` [PATCH 07/15] perf tools: Use snprintf() for root_dir path construction Arnaldo Carvalho de Melo
2026-06-12 2:54 ` sashiko-bot
2026-06-12 0:34 ` [PATCH 08/15] perf hwmon: Fix fd check to accept fd 0 in hwmon_pmu__describe_items() Arnaldo Carvalho de Melo
2026-06-12 0:34 ` [PATCH 09/15] perf sched: Replace (void*)1 sentinel with proper runtime allocation Arnaldo Carvalho de Melo
2026-06-12 0:34 ` [PATCH 10/15] perf bpf: Validate func_info_rec_size and sub_id in synthesize_bpf_prog_name() Arnaldo Carvalho de Melo
2026-06-12 0:52 ` sashiko-bot
2026-06-12 0:34 ` [PATCH 11/15] perf bpf: Reject oversized BPF metadata events that truncate header.size Arnaldo Carvalho de Melo
2026-06-12 0:34 ` [PATCH 12/15] perf bpf: Bounds-check array offsets in bpil_offs_to_addr() Arnaldo Carvalho de Melo
2026-06-12 0:51 ` sashiko-bot
2026-06-12 0:34 ` [PATCH 13/15] perf c2c: Free format list entries when releasing c2c hist entries Arnaldo Carvalho de Melo
2026-06-12 0:58 ` sashiko-bot
2026-06-12 0:34 ` [PATCH 14/15] perf symbols: Add O_NONBLOCK to DSO open() calls for untrusted paths Arnaldo Carvalho de Melo
2026-06-12 4:57 ` sashiko-bot
2026-06-12 5:52 ` Ian Rogers
2026-06-12 0:34 ` [PATCH 15/15] perf cs-etm: Reject CPU IDs that would overflow signed comparison Arnaldo Carvalho de Melo
2026-06-12 1:00 ` 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=20260612003444.50723-1-acme@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=tglx@linutronix.de \
--cc=williams@redhat.com \
/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.