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 v4 00/15] tracing/filters: Fix event filter parsing and matching bugs
Date: Thu, 29 Oct 2026 10:37:25 +0900 [thread overview]
Message-ID: <179323784538.740114.15323117974242744566.stgit@devnote2> (raw)
Hi,
Here is the 4th 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/179314820431.684037.4147763044424284198.stgit@devnote2
In this version, according to the comment from Sashiko and Steve, dropped
a redundant patch and reorder the patches for separating real bug fixes
(1-8) and cleanups & test (9-15). Steve and I agreed that the patches which
just fixes the error message will be a cleanup or improvement, so I removed
Fixes/Cc:stable tags from those.
Changes in v4:
- Dropped the separate regex_match_end() zero-length string fix patch
([01/16] in v3) as redundant per review from Sashiko.
- In [01/15], introduce regex_match_end_dynstr() for FILTER_STATIC_STRING
fields defined with size 0 (such as the 'buf' field of ftrace/print
events / trace_marker), so that suffix filtering on unbounded NUL-terminated
strings works as expected without penalizing fixed-size buffer matching.
- In [02/15], clean up process_system_preds() by replacing the 'fail'
boolean with 'ret' and consolidating the cleanup logic between fail
and fail_mem, as suggested by Steven Rostedt.
- In [09/15] (was [10/16]), verify that all characters following the
newline are whitespace before writing '\0' in filter_check_newline(),
preventing in-place truncation of the filter string on error, as
pointed out by Sashiko.
- In [10/15] (was [08/16]), drop Fixes and Cc: stable tags, as this is an
error log improvement cleanup rather than a bug fix.
Also move it after other Cc: stable patches.
- In [11/15] to [14/15], drop Fixes and Cc: stable tags from error
position fixes as these are cleanups.
Summary of the patches:
~~~~~~(fixes)~~~~~~
- [01/15] Introduce regex_match_end_str() for fixed-size string fields
(FILTER_COMM, FILTER_STATIC_STRING with field->size > 0), and
regex_match_end_dynstr() for unbounded strings (field->size == 0)
in parse_pred().
- [02/15] 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/15] 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/15] 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/15] Check if str[i] is NUL immediately after operator whitespace
in parse_pred() to prevent out-of-bounds reads on missing operands.
- [06/15] Fix quoted operand parsing in function event filters, check for
missing quotes, and advance past closing quotes.
- [07/15] Reject empty unquoted operands in function event filters.
- [08/15] 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().
~~~~~~(improvement/cleanups)~~~~~~
- [09/15] Convert the first newline to NUL and reject multi-line input
containing non-whitespace characters after the newline in
create_filter_start(), apply_event_filter(), and
apply_subsystem_event_filter().
- [10/15] Reject stray quotes and '(' in unquoted function event operands.
- [11/15] Fix parser error positions for base filter expressions
(predicate_parse(), FIELD_NOT_FOUND, IP_FIELD_ONLY, string/numeric
operators), and update tracing-error-log.tc.
- [12/15] Pass 'pos + fn_pos' for ILLEGAL_FIELD_OP and 'pos + op_pos' for
INVALID_OP in function filter operations in parse_pred().
- [13/15] Pass 'pos + op_pos' for CPUS operator checks and check
'str[i] != '{'' before incrementing 'i' for MISSING_BRACE_OPEN.
- [14/15] Pass 'pos + op_pos' for GLOB_WITHIN when '~' is used with a
'within' filter.
- [15/15] Add filter-syntax-check.tc to ftrace selftests to test valid
filters, syntax error diagnostics and caret positions, multi-line
input validation, 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.
Thank you,
---
base-commit: 1fdc4164e488916402badddbb1f51e9380dabb91
Masami Hiramatsu (Google) (15):
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: Check for missing operand after operator in parse_pred()
tracing/filters: Fix quoted operand parsing in function event filter
tracing/filters: Reject empty unquoted operand in function event filter
tracing/filters: Reject unsupported field sizes in parse_pred()
tracing/filters: Check for trailing characters after newline in filter string
tracing/filters: Reject stray quotes and parentheses in unquoted function event operand
tracing/filters: Fix error positions in filter parser
tracing/filters: Fix error position for function filter operations
tracing/filters: Fix error positions for CPUS mask parsing
tracing/filters: Fix error position for within filter operator check
selftests/ftrace: Add event filter syntax check test case
kernel/trace/trace_events_filter.c | 182 ++++++++++++++++----
.../ftrace/test.d/filter/filter-syntax-check.tc | 100 +++++++++++
.../ftrace/test.d/ftrace/tracing-error-log.tc | 2
3 files changed, 248 insertions(+), 36 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-29 1:37 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-29 1:37 Masami Hiramatsu (Google) [this message]
2026-10-29 1:37 ` [PATCH v4 01/15] tracing/filters: Fix MATCH_END_ONLY regex matching for fixed-size strings Masami Hiramatsu (Google)
2026-10-29 1:37 ` [PATCH v4 02/15] tracing/filters: Fix false success return in process_system_preds() Masami Hiramatsu (Google)
2026-10-29 1:45 ` sashiko-bot
2026-10-29 1:58 ` Masami Hiramatsu (Google)
2026-10-29 2:30 ` [PATCH v4.1 " Masami Hiramatsu (Google)
2026-10-29 1:37 ` [PATCH v4 03/15] tracing/filters: Handle out-of-range CPU for OP_NE in cpumask comparison Masami Hiramatsu (Google)
2026-10-29 1:38 ` [PATCH v4 04/15] tracing/filters: Report parse error on all -EINVAL paths in filter parsing Masami Hiramatsu (Google)
2026-10-29 1:38 ` [PATCH v4 05/15] tracing/filters: Check for missing operand after operator in parse_pred() Masami Hiramatsu (Google)
2026-10-29 1:38 ` [PATCH v4 06/15] tracing/filters: Fix quoted operand parsing in function event filter Masami Hiramatsu (Google)
2026-10-29 1:38 ` [PATCH v4 07/15] tracing/filters: Reject empty unquoted operand " Masami Hiramatsu (Google)
2026-10-29 1:38 ` [PATCH v4 08/15] tracing/filters: Reject unsupported field sizes in parse_pred() Masami Hiramatsu (Google)
2026-10-29 1:38 ` [PATCH v4 09/15] tracing/filters: Check for trailing characters after newline in filter string Masami Hiramatsu (Google)
2026-10-29 1:38 ` [PATCH v4 10/15] tracing/filters: Reject stray quotes and parentheses in unquoted function event operand Masami Hiramatsu (Google)
2026-10-29 1:39 ` [PATCH v4 11/15] tracing/filters: Fix error positions in filter parser Masami Hiramatsu (Google)
2026-10-29 1:39 ` [PATCH v4 12/15] tracing/filters: Fix error position for function filter operations Masami Hiramatsu (Google)
2026-10-29 1:39 ` [PATCH v4 13/15] tracing/filters: Fix error positions for CPUS mask parsing Masami Hiramatsu (Google)
2026-10-29 1:39 ` [PATCH v4 14/15] tracing/filters: Fix error position for within filter operator check Masami Hiramatsu (Google)
2026-10-29 1:39 ` [PATCH v4 15/15] selftests/ftrace: Add event filter syntax check test case Masami Hiramatsu (Google)
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=179323784538.740114.15323117974242744566.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox