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 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.