[PATCH v3 14/16] tracing/filters: Fix error positions for CPUS mask parsing

From: Masami Hiramatsu (Google)

Date: Tue Oct 27 2026 - 20:46:31 EST


From: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>

In parse_pred(), CPUS mask error paths report incorrect error positions:
- Checking 'str[i++] != '\'{'\'' post-increments 'i' before calling
parse_error(), shifting the error caret one character past the
missing brace position.
- In the CPUS operator check and comparison function selection check,
'pos + i' points to the CPUS operand or past it instead of the
unsupported operator.

Check 'str[i] != '\'{'\'' before incrementing 'i', and pass 'pos + op_pos'
for the operator checks so the error caret points accurately.

Fixes: 39f7c41c908b ("tracing/filters: Enable filtering a cpumask field by another cpumask")
Fixes: 3cbec9d7b93d ("tracing/filters: Enable filtering a scalar field by a cpumask")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>
---
Changes in v3:
- Group error position fixes for CPUS mask parsing into a single patch
targeting commit 39f7c41c908b and commit 3cbec9d7b93d.
---
kernel/trace/trace_events_filter.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index b1b4f1a57dc9..291c9805e119 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -1926,16 +1926,17 @@ static int parse_pred(const char *str, void *data,
case OP_BAND:
break;
default:
- parse_error(pe, FILT_ERR_ILLEGAL_FIELD_OP, pos + i);
+ parse_error(pe, FILT_ERR_ILLEGAL_FIELD_OP, pos + op_pos);
goto err_free;
}

/* Skip CPUS */
i += 4;
- if (str[i++] != '{') {
+ if (str[i] != '{') {
parse_error(pe, FILT_ERR_MISSING_BRACE_OPEN, pos + i);
goto err_free;
}
+ i++;
maskstart = i;

/* Walk the cpulist until closing } */
@@ -2023,7 +2024,7 @@ static int parse_pred(const char *str, void *data,
}
}
if (pred->fn_num == FILTER_PRED_FN_NOP) {
- parse_error(pe, FILT_ERR_INVALID_OP, pos + i);
+ parse_error(pe, FILT_ERR_INVALID_OP, pos + op_pos);
goto err_free;
}