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>,
Stephane Eranian <eranian@google.com>,
Stefano Sanfilippo <ssanfilippo@chromium.org>
Subject: [PATCH v2 0/5] perf jitdump: Fix debug entry access, unwinding state and sample id sizing
Date: Fri, 4 Sep 2026 11:40:52 -0300 [thread overview]
Message-ID: <20260904144058.3341-1-acme@kernel.org> (raw)
Hi,
Five fixes for the jitdump/genelf code path, all reported by the
sashiko-bot AI reviewer while reviewing the hardening series that is now
in perf-tools-next:
- struct debug_entry ends with a variable-length name[], so entries
after the first start at addresses that are not naturally aligned.
- jit_repipe_code_load() only released the unwinding state when both
unwinding_data and eh_frame_hdr_size were set.
- the sample id area appended to the synthesized mmap2 records was
cast to a fixed {u32 pid, tid; u64 time;} struct. That only matches
what evsel__id_hdr_size() accounts for when PERF_SAMPLE_TID is set
as well, since the fields are appended in a fixed order skipping the
ones not requested. Patch 4 walks the area in that order and patch
5 sizes the allocation with idr_size instead of a hardcoded +16, so
that what is written and what is allocated agree.
Patches 1 and 5 are unchanged from v1.
Best regards,
- Arnaldo
What changed from v1 (599fad82626e5eba):
PATCH 2/5:
- Kept lineno and last_line signed. v1 read ent->lineno into an
unsigned int, so the "lineno - last_line" delta handed to
emit_advance_lineno() wrapped to a large positive value and, being
widened to a long, zero-extended instead of sign-extending: a
backward line jump became a huge forward one, corrupting the DWARF
line number program [sashiko-bot review of PATCH 2/5].
PATCH 3/5:
- Added Reviewed-by: Ian Rogers.
PATCH 4/5 (new):
- Walks the sample id area in the order evsel__id_hdr_size() accounts
for (TID, TIME, ID, STREAM_ID, CPU, IDENTIFIER — 8 bytes each)
advancing only past the fields whose sample_type bit is set,.
This is the [Critical] finding from the sashiko-bot review of v1
PATCH 4/5: with PERF_SAMPLE_TID unset, PERF_SAMPLE_TIME belongs at
offset 0 and idr_size is 8, so the old code stored it at offset 8 —
past the end of the allocation, and corrupting what a reader
expects to find at offset 0 besides. It is split out from the
sizing change so that 5/5 no longer removes the slack that was
masking it, and so that the same latent bug in
jit_repipe_code_load() — which already sized with idr_size — is
fixed in the same place.
PATCH 5/5 (was 4/5):
- Unchanged, and now safe: 4/5 above keeps the writes inside idr_size.
DROPPED (was v1 PATCH 5/5):
- "perf dso: Defer dropping the open list reference until after the
lock". Ian Rogers is not a fan of the deferral mechanism and
suggested instead allocating dso_data separately from the dso, so
that the lock can be scoped without it. Dropped from this series
while that is worked out.
- The pre-existing issues sashiko-bot raised that are outside the
scope of this series are recorded in tools/perf/TODO.hardening for
follow-up work: item 170 (jit_get_next_entry() lacks per-record
size validation), 171 (jit_process_dump()/jit_inject() swallow
callback errors), 172 (jit_emit_elf() truncates 64-bit unwinding
sizes to u32), 173 (jit_emit_elf() opens a predictable filename
without O_EXCL/O_NOFOLLOW) and 176 (buffer_ext_add() realloc
failure ignored by all callers). The two this series does address
are items 174 and 153, now marked fixed.
- Rebased onto the current perf-tools-next head (92d50319b4f0c0bb).
Arnaldo Carvalho de Melo (5):
perf jitdump: Byte-swap debug entries via unaligned-safe accessors
perf genelf: Use unaligned-safe accessors for debug entries
perf jitdump: Free unwinding data even when eh_frame_hdr_size is zero
perf jitdump: Write sample id fields in the order used by
evsel__id_hdr_size()
perf jitdump: Size code_move event allocation with idr_size
tools/perf/util/genelf_debug.c | 28 +++++++-----
tools/perf/util/jitdump.c | 84 +++++++++++++++++++++++-----------
2 files changed, 75 insertions(+), 37 deletions(-)
base-commit: 92d50319b4f0c0bbee8a236a09063272cd22faab
v1-head: 599fad82626e5eba485b4d4d188cbd34c0e12cbc
next reply other threads:[~2026-09-04 14:41 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 14:40 Arnaldo Carvalho de Melo [this message]
2026-09-04 14:40 ` [PATCH 1/5] perf jitdump: Byte-swap debug entries via unaligned-safe accessors Arnaldo Carvalho de Melo
2026-09-04 14:40 ` [PATCH 2/5] perf genelf: Use unaligned-safe accessors for debug entries Arnaldo Carvalho de Melo
2026-09-04 14:40 ` [PATCH 3/5] perf jitdump: Free unwinding data even when eh_frame_hdr_size is zero Arnaldo Carvalho de Melo
2026-09-04 14:40 ` [PATCH 4/5] perf jitdump: Write sample id fields in the order used by evsel__id_hdr_size() Arnaldo Carvalho de Melo
2026-09-04 14:40 ` [PATCH 5/5] perf jitdump: Size code_move event allocation with idr_size Arnaldo Carvalho de Melo
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=20260904144058.3341-1-acme@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=eranian@google.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=ssanfilippo@chromium.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®