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