From: sashiko-bot@kernel.org
To: "Arnaldo Carvalho de Melo" <acme@kernel.org>
Cc: linux-perf-users@vger.kernel.org
Subject: Re: [PATCH 09/15] perf scripts: Add perf-stuck, to tell where a running perf is stuck
Date: Thu, 17 Sep 2026 16:04:56 +0000 [thread overview]
Message-ID: <20260917160456.CD3131F000FF@smtp.kernel.org> (raw)
In-Reply-To: <20260917155528.62607-10-acme@kernel.org>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] perf/scripts: privilege escalation via unscoped pgrep in perf-stuck.sh
- [Medium] perf/scripts: gdb script crashes on NULL dwarf_diename()
--
commit 31fcb1c1d74aa548fa6dd4ca2fccfd9cd7dfd922
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
perf scripts: Add perf-stuck, to tell where a running perf is stuck
This commit adds the perf-stuck.sh and perf-stuck.gdb scripts to sample a
running process and determine if it is stuck in an unbounded loop or
recursing. The script checks /proc/<pid> entries at a fixed interval and can
optionally use gdb to dump the DIE chain being walked if the process is stuck
in a DWARF type chasing loop.
> diff --git a/tools/perf/scripts/perf-stuck.gdb b/tools/perf/scripts/perf-stuck.gdb
> new file mode 100644
> index 0000000000000..53e9019828b6e
> --- /dev/null
> +++ b/tools/perf/scripts/perf-stuck.gdb
> @@ -0,0 +1,104 @@
[ ... ]
> +define perf-die-chain
> + if $argc < 2
> + printf "usage: perf-die-chain <function> <die variable> [iterations]\n"
> + else
> + frame function $arg0
> + if $argc == 3
> + set $perf_die_chain_n = $arg2
> + else
> + set $perf_die_chain_n = 10
> + end
> + set $perf_die_chain_head = $pc
> + set $perf_die_chain_i = 0
> + while $perf_die_chain_i < $perf_die_chain_n
> + printf "chain[%d] die=%p addr=%p cu=%p off=0x%lx tag=%d name=%s\n", $perf_die_chain_i, $arg1, $arg1->addr, $arg1->cu, ((Dwarf_Off) dwarf_dieoffset($arg1)), ((int) dwarf_tag($arg1)), ((char *) dwarf_diename($arg1))
[Severity: Medium]
Since pointer type DIEs lack a DW_AT_name attribute, dwarf_diename() will
return NULL for them. Will GDB's printf with the %s format specifier evaluating
a 0x0 pointer result in a "Cannot access memory at address 0x0" error, aborting
the GDB batch script?
> + until *$perf_die_chain_head
> + set $perf_die_chain_i = $perf_die_chain_i + 1
> + end
> + end
> +end
[ ... ]
> diff --git a/tools/perf/scripts/perf-stuck.sh b/tools/perf/scripts/perf-stuck.sh
> new file mode 100755
> index 0000000000000..70e59192b1d96
> --- /dev/null
> +++ b/tools/perf/scripts/perf-stuck.sh
> @@ -0,0 +1,194 @@
[ ... ]
> +if [[ "$1" =~ ^[0-9]+$ ]]; then
> + pid=$1
> +else
> + pid=$(pgrep -x "$1" | head -1)
[Severity: High]
Since pgrep -x searches across all users, could an unprivileged user create a
malicious process matching the target name (e.g. 'perf'), causing this to
resolve to the attacker's PID instead of the legitimate root process if an
administrator runs this script?
> + [ -n "$pid" ] || { echo "no process named '$1'"; exit 1; }
> +fi
[ ... ]
> + if [ -n "$use_gdb" ] && [ -z "$gdb_done" ] && [ "$stuck" -ge 2 ]; then
> + gdb_log=$(mktemp /tmp/perf-stuck-gdb.XXXXXX)
> + gdb -p "$pid" -batch -x "$gdb_cmds" -ex bt \
[Severity: High]
If the PID was resolved to an attacker-controlled process, does invoking gdb
as root on it allow local privilege escalation by executing arbitrary code via
malicious DWARF debug info or GDB auto-load scripts?
> + -ex 'perf-die-chain-all' -ex perf-dso -ex detach > "$gdb_log" 2>&1
> + gdb_done=1
> + echo "... gdb output of $pid in $gdb_log"
> + fi
> +
> + prev_cpu=$cpu
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260917155528.62607-1-acme@kernel.org?part=9
next prev parent reply other threads:[~2026-09-17 16:04 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-17 15:55 [PATCH v7 0/15] perf tools: Annotate fixes, stdio progress indication, debuginfo-client in more places Arnaldo Carvalho de Melo
2026-09-17 15:55 ` [PATCH 01/15] perf debuginfo: Fetch debuginfo keyed by build ID using debuginfod Arnaldo Carvalho de Melo
2026-09-17 16:03 ` sashiko-bot
2026-09-17 17:58 ` Ian Rogers
2026-09-17 20:36 ` Arnaldo Carvalho de Melo
2026-09-17 15:55 ` [PATCH 02/15] perf debuginfo: Set DEBUGINFOD_URLS from /etc/debuginfod when unset Arnaldo Carvalho de Melo
2026-09-17 16:07 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 03/15] perf config: Move perf_config__set_variable() to util/config.c Arnaldo Carvalho de Melo
2026-09-17 16:11 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 04/15] perf debuginfo: Let the user skip and disable debuginfod fetches Arnaldo Carvalho de Melo
2026-09-17 16:05 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 05/15] perf debuginfo: Show the debuginfod fetch progress and keys in the TUI Arnaldo Carvalho de Melo
2026-09-17 16:09 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 06/15] perf symbol: Fall back to fetching the vmlinux by build ID Arnaldo Carvalho de Melo
2026-09-17 16:08 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 07/15] perf annotate-data: Show the sample count in the data-type browser Arnaldo Carvalho de Melo
2026-09-17 16:04 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 08/15] perf report: Add --progress option Arnaldo Carvalho de Melo
2026-09-17 16:02 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 09/15] perf scripts: Add perf-stuck, to tell where a running perf is stuck Arnaldo Carvalho de Melo
2026-09-17 16:04 ` sashiko-bot [this message]
2026-09-17 15:55 ` [PATCH 10/15] perf dwarf-aux: Bound the type chases for broken debug info Arnaldo Carvalho de Melo
2026-09-17 16:03 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 11/15] perf dwarf-aux: Add die_same_file() and die_get_type_die() Arnaldo Carvalho de Melo
2026-09-17 16:09 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 12/15] perf annotate-data: Resolve type DIEs in the debug file they came from Arnaldo Carvalho de Melo
2026-09-17 16:09 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 13/15] perf annotate-data: Bound the member nesting recursion Arnaldo Carvalho de Melo
2026-09-17 16:08 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 14/15] perf mem record: Request PERF_SAMPLE_CPU by default Arnaldo Carvalho de Melo
2026-09-17 16:15 ` sashiko-bot
2026-09-17 15:55 ` [PATCH 15/15] perf mem record: Use the IBS swfilt filter when available Arnaldo Carvalho de Melo
2026-09-17 16:09 ` 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=20260917160456.CD3131F000FF@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox