From: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Shuah Khan <shuah@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org
Subject: [PATCH v2 0/9] tracing/filters: Fix event filter parsing and matching bugs
Date: Sun, 25 Oct 2026 17:37:09 +0900 [thread overview]
Message-ID: <179291742944.492959.11659339795290028998.stgit@devnote2> (raw)
Hi,
Here is the second version of fixes for various bugs in the trace event
filter parser and predicate evaluation in kernel/trace/trace_events_filter.c,
along with a new ftracetest test case covering filter syntax checks.
The previous version is here:
https://lore.kernel.org/all/179285912318.466249.7425922682086130057.stgit@devnote2
Changes in v2:
[01/09]
- Guard against negative length and avoid calling strnlen() when the
buffer capacity is smaller than the search pattern.
- Use strnlen(str, len) directly instead of calling strlen(str) when
len is 0, avoiding an out-of-bounds read on 0-length dynamic arrays.
[03/10] (in v1)
- Dropped because out-of-range CPU numbers are already rejected at
filter parse time by cpulist_parse() checking against nr_cpu_ids,
making the runtime check in do_filter_cpumask_scalar() unreachable.
Summary of the patches:
- [01/09] Compute the actual string length with strnlen() in
regex_match_end() so suffix matching ("*pattern") works on fixed-size
string fields (such as comm) and dynamic strings.
- [02/09] Fix process_system_preds() so that "fail" is only cleared when
at least one event in the subsystem succeeds, and use
delay_free_filter() when freeing replaced filters on error paths.
- [03/09] Return "pred->op == OP_NE" when "cpu >= nr_cpu_ids" in
DEFINE_CPUMASK_COMPARISON_PRED so "!=" against a cpumask evaluates to
true for out-of-range CPU numbers.
- [04/09] Ensure parse_error() is called on all -EINVAL error paths in
parse_pred(), predicate_parse(), and process_preds() instead of
leaving lasterr as 0 ("Error: (0)").
- [05/09] Fix function event ("ip") operand parsing in parse_pred() to
avoid reading past the NUL terminator on empty operands, check for
missing closing quotes, advance past closing quotes, and reject empty
operands or stray quotes/'(' in unquoted operands.
- [06/09] Advance past the second character of "&&" and "||" in
calc_stack() so the second operator character is not miscounted as a
new predicate.
- [07/09] Reject unsupported field sizes in parse_pred() when
select_comparison_fn() or CPUS{} size matching leaves pred->fn_num as
FILTER_PRED_FN_NOP, avoiding a kernel warning in update_pred_fn().
- [08/09] Terminate the input filter string at the first newline ('\n')
in create_filter_start(), apply_event_filter(), and
apply_subsystem_event_filter() so multi-line input cannot desynchronize
cpulist_parse()/parse_pred() from calc_stack() or misalign error_log
caret placement. (as an improvement)
- [09/09] Add filter-syntax-check.tc to ftrace selftests to test valid
filters, syntax error diagnostics and caret positions, multi-line
input truncation, and subsystem filter error returns.
Notes:
- These bugs were identified and the fixes and cover letter were
prepared with the assistance of an LLM coding assistant.
- Also, note that [08/09] may need more discussion because it can break
user space tool which attempts to use line-break characters as a filter
for reasons that are not entirely clear. But as far as I can see, the
error_log does not support such multi-line filter input. So I think
we still need it. (But not sure we should backport it, maybe as an
improvement.)
Thank you,
---
base-commit: 1fdc4164e488916402badddbb1f51e9380dabb91
Masami Hiramatsu (Google) (9):
tracing/filters: Fix MATCH_END_ONLY regex matching for fixed-size strings
tracing/filters: Fix false success return in process_system_preds()
tracing/filters: Handle out-of-range CPU for OP_NE in cpumask comparison
tracing/filters: Report parse error on all -EINVAL paths in filter parsing
tracing/filters: Fix function event operand parsing in parse_pred()
tracing/filters: Skip second character of '&&' and '||' in calc_stack()
tracing/filters: Reject unsupported field sizes in parse_pred()
tracing/filters: Terminate filter string at first newline
selftests/ftrace: Add event filter syntax check test case
kernel/trace/trace_events_filter.c | 101 +++++++++++++++-----
.../ftrace/test.d/filter/filter-syntax-check.tc | 52 ++++++++++
2 files changed, 130 insertions(+), 23 deletions(-)
create mode 100644 tools/testing/selftests/ftrace/test.d/filter/filter-syntax-check.tc
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
next reply other threads:[~2026-10-25 8:37 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-25 8:37 Masami Hiramatsu (Google) [this message]
2026-10-25 8:37 ` [PATCH v2 1/9] tracing/filters: Fix MATCH_END_ONLY regex matching for fixed-size strings Masami Hiramatsu (Google)
2026-10-26 23:11 ` Masami Hiramatsu (Google)
2026-10-25 8:37 ` [PATCH v2 2/9] tracing/filters: Fix false success return in process_system_preds() Masami Hiramatsu (Google)
2026-10-25 8:37 ` [PATCH v2 3/9] tracing/filters: Handle out-of-range CPU for OP_NE in cpumask comparison Masami Hiramatsu (Google)
2026-10-25 8:37 ` [PATCH v2 4/9] tracing/filters: Report parse error on all -EINVAL paths in filter parsing Masami Hiramatsu (Google)
2026-10-25 8:37 ` [PATCH v2 5/9] tracing/filters: Fix function event operand parsing in parse_pred() Masami Hiramatsu (Google)
2026-10-26 20:32 ` Steven Rostedt
2026-10-26 23:37 ` Masami Hiramatsu (Google)
2026-10-25 8:38 ` [PATCH v2 6/9] tracing/filters: Skip second character of '&&' and '||' in calc_stack() Masami Hiramatsu (Google)
2026-10-26 20:47 ` Steven Rostedt
2026-10-26 23:50 ` Masami Hiramatsu (Google)
2026-10-27 0:12 ` Masami Hiramatsu (Google)
2026-10-27 12:45 ` Steven Rostedt
2026-10-25 8:38 ` [PATCH v2 7/9] tracing/filters: Reject unsupported field sizes in parse_pred() Masami Hiramatsu (Google)
2026-10-25 8:38 ` [PATCH v2 8/9] tracing/filters: Terminate filter string at first newline Masami Hiramatsu (Google)
2026-10-26 20:49 ` Steven Rostedt
2026-10-26 23:53 ` Masami Hiramatsu (Google)
2026-10-25 8:38 ` [PATCH v2 9/9] selftests/ftrace: Add event filter syntax check test case Masami Hiramatsu (Google)
2026-10-25 8:46 ` 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=179291742944.492959.11659339795290028998.stgit@devnote2 \
--to=mhiramat@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=rostedt@goodmis.org \
--cc=shuah@kernel.org \
/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.