perf trace requires root because it needs to use [ku]probes.
Skip those test when it's not run as root.
Before:
$ perf test probe
47: Probe SDT events : Ok
104: test perf probe of function from different CU : FAILED!
115: perftool-testsuite_probe : FAILED!
117: Add vfs_getname probe to get syscall args filenames : FAILED!
118: probe libc's inet_pton & backtrace it with ping : FAILED!
119: Use vfs_getname probe to get syscall args filenames : FAILED!
After:
$ perf test probe
47: Probe SDT events : Ok
104: test perf probe of function from different CU : Skip
115: perftool-testsuite_probe : Skip
117: Add vfs_getname probe to get syscall args filenames : Skip
118: probe libc's inet_pton & backtrace it with ping : Skip
119: Use vfs_getname probe to get syscall args filenames : Skip
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/tests/shell/perftool-testsuite_probe.sh | 1 +
tools/perf/tests/shell/probe_vfs_getname.sh | 1 +
tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 1 +
.../tests/shell/record+script_probe_vfs_getname.sh | 1 +
.../perf/tests/shell/test_uprobe_from_different_cu.sh | 11 +++++------
5 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/tools/perf/tests/shell/perftool-testsuite_probe.sh b/tools/perf/tests/shell/perftool-testsuite_probe.sh
index 7b1bfd0f888fc30c..add77aaeb26421a5 100755
--- a/tools/perf/tests/shell/perftool-testsuite_probe.sh
+++ b/tools/perf/tests/shell/perftool-testsuite_probe.sh
@@ -2,6 +2,7 @@
# perftool-testsuite_probe (exclusive)
# SPDX-License-Identifier: GPL-2.0
+[ "$(id -u)" == 0 ] || exit 2
test -d "$(dirname "$0")/base_probe" || exit 2
cd "$(dirname "$0")/base_probe" || exit 2
status=0
diff --git a/tools/perf/tests/shell/probe_vfs_getname.sh b/tools/perf/tests/shell/probe_vfs_getname.sh
index 0c5aacc446b3ef76..b8e53a9d8473bf6b 100755
--- a/tools/perf/tests/shell/probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/probe_vfs_getname.sh
@@ -8,6 +8,7 @@
. "$(dirname $0)"/lib/probe.sh
skip_if_no_perf_probe || exit 2
+[ "$(id -u)" == 0 ] || exit 2
# shellcheck source=lib/probe_vfs_getname.sh
. "$(dirname $0)"/lib/probe_vfs_getname.sh
diff --git a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
index d5e5193cceb625fd..07a1527c5c03b93d 100755
--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
+++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
@@ -105,6 +105,7 @@ delete_libc_inet_pton_event() {
# Check for IPv6 interface existence
ip a sh lo | grep -F -q inet6 || exit 2
+[ "$(id -u)" == 0 ] || exit 2
skip_if_no_perf_probe && \
add_libc_inet_pton_event && \
diff --git a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
index 5940fdc1df37c502..0af3af90a8dcc742 100755
--- a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
@@ -13,6 +13,7 @@
. "$(dirname "$0")/lib/probe.sh"
skip_if_no_perf_probe || exit 2
+[ "$(id -u)" == 0 ] || exit 2
# shellcheck source=lib/probe_vfs_getname.sh
. "$(dirname "$0")/lib/probe_vfs_getname.sh"
diff --git a/tools/perf/tests/shell/test_uprobe_from_different_cu.sh b/tools/perf/tests/shell/test_uprobe_from_different_cu.sh
index 33387c329f92b6ed..7adf9755d6de240e 100755
--- a/tools/perf/tests/shell/test_uprobe_from_different_cu.sh
+++ b/tools/perf/tests/shell/test_uprobe_from_different_cu.sh
@@ -4,12 +4,11 @@
set -e
-# Skip if there's no probe command.
-if ! perf | grep probe
-then
- echo "Skip: probe command isn't present"
- exit 2
-fi
+# shellcheck source=lib/probe.sh
+. "$(dirname $0)"/lib/probe.sh
+
+skip_if_no_perf_probe || exit 2
+[ "$(id -u)" == 0 ] || exit 2
# skip if there's no gcc
if ! [ -x "$(command -v gcc)" ]; then
--
2.48.1.711.g2feabab25a-goog
On Fri, Feb 28, 2025 at 08:02:50PM -0800, Namhyung Kim wrote:
> perf trace requires root because it needs to use [ku]probes.
> Skip those test when it's not run as root.
>
> Before:
> $ perf test probe
> 47: Probe SDT events : Ok
> 104: test perf probe of function from different CU : FAILED!
> 115: perftool-testsuite_probe : FAILED!
> 117: Add vfs_getname probe to get syscall args filenames : FAILED!
> 118: probe libc's inet_pton & backtrace it with ping : FAILED!
> 119: Use vfs_getname probe to get syscall args filenames : FAILED!
Do you have ShellCheck installed?
TEST /tmp/build/perf-tools-next/tests/shell/probe_vfs_getname.sh.shellcheck_log
TEST /tmp/build/perf-tools-next/tests/shell/record+probe_libc_inet_pton.sh.shellcheck_log
TEST /tmp/build/perf-tools-next/tests/shell/record+script_probe_vfs_getname.sh.shellcheck_log
In tests/shell/probe_vfs_getname.sh line 11:
[ "$(id -u)" == 0 ] || exit 2
^-- SC3014 (warning): In POSIX sh, == in place of = is undefined.
For more information:
https://www.shellcheck.net/wiki/SC3014 -- In POSIX sh, == in place of = is ...
In tests/shell/record+script_probe_vfs_getname.sh line 16:
[ "$(id -u)" == 0 ] || exit 2
^-- SC3014 (warning): In POSIX sh, == in place of = is undefined.
For more information:
https://www.shellcheck.net/wiki/SC3014 -- In POSIX sh, == in place of = is ...
make[4]: *** [tests/Build:91: /tmp/build/perf-tools-next/tests/shell/probe_vfs_getname.sh.shellcheck_log] Error 1
make[4]: *** Waiting for unfinished jobs....
make[4]: *** [tests/Build:91: /tmp/build/perf-tools-next/tests/shell/record+script_probe_vfs_getname.sh.shellcheck_log] Error 1
In tests/shell/record+probe_libc_inet_pton.sh line 108:
[ "$(id -u)" == 0 ] || exit 2
^-- SC3014 (warning): In POSIX sh, == in place of = is undefined.
For more information:
https://www.shellcheck.net/wiki/SC3014 -- In POSIX sh, == in place of = is ...
make[4]: *** [tests/Build:91: /tmp/build/perf-tools-next/tests/shell/record+probe_libc_inet_pton.sh.shellcheck_log] Error 1
make[3]: *** [/home/acme/git/perf-tools-next/tools/build/Makefile.build:138: tests] Error 2
make[2]: *** [Makefile.perf:810: /tmp/build/perf-tools-next/perf-test-in.o] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile.perf:321: sub-make] Error 2
make: *** [Makefile:119: install-bin] Error 2
make: Leaving directory '/home/acme/git/perf-tools-next/tools/perf'
⬢ [acme@toolbox perf-tools-next]$
The patch below seems to make it happy.
But since it seems to be mixed up, i.e. its not a string comparision, so
why the quotes?
Probably it should be
[ $(id -u) -eq 0 ] || exit 2
?
It all works with bash, but ShellCheck being installed stops the build
with that POSIX error.
⬢ [acme@toolbox perf-tools-next]$ [ "$(id -u)" == 1000 ] && echo bla
bla
⬢ [acme@toolbox perf-tools-next]$ [ "$(id -u)" = 1000 ] && echo bla
bla
⬢ [acme@toolbox perf-tools-next]$ [ $(id -u) -eq 1000 ] && echo bla
bla
⬢ [acme@toolbox perf-tools-next]$ id
uid=1000(acme) gid=1000(acme) groups=1000(acme),10(wheel)
⬢ [acme@toolbox perf-tools-next]
- Arnaldo
diff --git a/tools/perf/tests/shell/probe_vfs_getname.sh b/tools/perf/tests/shell/probe_vfs_getname.sh
index b8e53a9d8473bf6b..c51a32931af6313e 100755
--- a/tools/perf/tests/shell/probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/probe_vfs_getname.sh
@@ -8,7 +8,7 @@
. "$(dirname $0)"/lib/probe.sh
skip_if_no_perf_probe || exit 2
-[ "$(id -u)" == 0 ] || exit 2
+[ "$(id -u)" = 0 ] || exit 2
# shellcheck source=lib/probe_vfs_getname.sh
. "$(dirname $0)"/lib/probe_vfs_getname.sh
diff --git a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
index 07a1527c5c03b93d..c4bab5b5cc59f0b3 100755
--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
+++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
@@ -105,7 +105,7 @@ delete_libc_inet_pton_event() {
# Check for IPv6 interface existence
ip a sh lo | grep -F -q inet6 || exit 2
-[ "$(id -u)" == 0 ] || exit 2
+[ "$(id -u)" = 0 ] || exit 2
skip_if_no_perf_probe && \
add_libc_inet_pton_event && \
diff --git a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
index 0af3af90a8dcc742..fd5b10d469158b65 100755
--- a/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
+++ b/tools/perf/tests/shell/record+script_probe_vfs_getname.sh
@@ -13,7 +13,7 @@
. "$(dirname "$0")/lib/probe.sh"
skip_if_no_perf_probe || exit 2
-[ "$(id -u)" == 0 ] || exit 2
+[ "$(id -u)" = 0 ] || exit 2
# shellcheck source=lib/probe_vfs_getname.sh
. "$(dirname "$0")/lib/probe_vfs_getname.sh"
Hi Arnaldo, On Wed, Mar 05, 2025 at 02:45:19PM -0300, Arnaldo Carvalho de Melo wrote: > On Fri, Feb 28, 2025 at 08:02:50PM -0800, Namhyung Kim wrote: > > perf trace requires root because it needs to use [ku]probes. > > Skip those test when it's not run as root. > > > > Before: > > $ perf test probe > > 47: Probe SDT events : Ok > > 104: test perf probe of function from different CU : FAILED! > > 115: perftool-testsuite_probe : FAILED! > > 117: Add vfs_getname probe to get syscall args filenames : FAILED! > > 118: probe libc's inet_pton & backtrace it with ping : FAILED! > > 119: Use vfs_getname probe to get syscall args filenames : FAILED! > > Do you have ShellCheck installed? > > TEST /tmp/build/perf-tools-next/tests/shell/probe_vfs_getname.sh.shellcheck_log > TEST /tmp/build/perf-tools-next/tests/shell/record+probe_libc_inet_pton.sh.shellcheck_log > TEST /tmp/build/perf-tools-next/tests/shell/record+script_probe_vfs_getname.sh.shellcheck_log > > In tests/shell/probe_vfs_getname.sh line 11: > [ "$(id -u)" == 0 ] || exit 2 > ^-- SC3014 (warning): In POSIX sh, == in place of = is undefined. > > For more information: > https://www.shellcheck.net/wiki/SC3014 -- In POSIX sh, == in place of = is ... Sorry for the noise, it's fixed in v2. Thanks, Namhyung
© 2016 - 2026 Red Hat, Inc.