Re: [PATCH v2 9/9] selftests/ftrace: Add event filter syntax check test case

From
sashiko-bot@kernel.org
Date
2026-10-25 08:46:40
Reply to
Masami Hiramatsu (Google), 2026-10-25
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] selftests/ftrace: negated pipelines in filter-syntax-check.tc bypass set -e
--

commit 98a96a63f4d758b8db11a7d2138febf6cb5cf6e9
Author: Masami Hiramatsu (Google) [off-list ref]

selftests/ftrace: Add event filter syntax check test case

This patch adds filter-syntax-check.tc to test valid event filter
expressions, error_log caret reporting for malformed filter expressions,
newline truncation on multi-line filter input, and error returns on invalid
subsystem filters.
quoted hunk ↗ jump to hunk
diff --git a/tools/testing/selftests/ftrace/test.d/filter/filter-syntax-check.tc b/tools/testing/selftests/ftrace/test.d/filter/filter-syntax-check.tc
new file mode 100644
index 0000000000000..68c8accc5ffd0
--- /dev/null
+++ b/tools/testing/selftests/ftrace/test.d/filter/filter-syntax-check.tc
@@ -0,0 +1,52 @@
[ ... ]
quoted hunk ↗ jump to hunk
+# Multi-line input must be truncated at the first newline
+echo > error_log
+! ( printf "common_pid == CPUS{0\n\"} && common_pid == 0 && common_pid == CPUS{0\n\"}" | \
+    dd of=events/sched/sched_switch/filter bs=4096 ) 2> /dev/null
+grep -q "Missing '}'" error_log
+! grep -q "Missing matching quote" error_log
+
+# Subsystem filter must fail on invalid filter expressions
+echo 'common_pid >= 0' > events/sched/filter
+! echo 'no_such_field == 1' > events/sched/filter
+! echo 'common_pid == 1 &&' > events/sched/filter
+echo 0 > events/sched/filter
+
+exit 0
[Severity: Medium]
Will these negated pipelines actually fail the test if any of the inner
commands unexpectedly succeed?

In tools/testing/selftests/ftrace/ftracetest, __run_test() sources each
test script in a /bin/sh subshell with set -e enabled:

    __run_test() { # testfile
      # setup PID and PPID, $$ is not updated.
      (cd $TRACING_DIR; read PID _ < /proc/self/stat; set -e; set -x;
       checkreq $1; initialize_system; . $1)
      [ $? -ne 0 ] && kill -s $SIG_FAIL $SIG_PID
    }

In POSIX sh, set -e is ignored for any pipeline beginning with the !
reserved word. If the dd, grep, or echo commands in filter-syntax-check.tc
unexpectedly return 0, the negated pipeline evaluates to status 1 without
causing the shell to exit, and execution continues through:

    echo 0 > events/sched/filter

    exit 0

allowing the test to pass even when a negative check fails. Should these use
explicit failure handling (such as || exit_fail) or wrap the negation in a
subshell so set -e catches an unexpected success?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/179291742944.492959.11659339795290028998.stgit@devnote2?part=9
Thread (20 messages) 20 messages, 3 authors, last reply 16d ago
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help