All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v4 02/15] tracing/filters: Fix false success return in process_system_preds()
Date: Thu, 29 Oct 2026 01:45:53 +0000	[thread overview]
Message-ID: <sashiko-outbox-188613@kernel.org> (raw)
In-Reply-To: <179323786427.740114.10413984130946236850.stgit@devnote2>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] tracing/filters: process_system_preds() returns 0 on ENOMEM after match
--

commit a15564919ee696f8c1b9df5aeee0a37935f51db7
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>

tracing/filters: Fix false success return in process_system_preds()

This commit replaces the boolean fail flag in process_system_preds() with
ret so that process_system_preds() returns -EINVAL when no event in the
subsystem matches the filter. It also consolidates the fail and fail_mem
error cleanup paths.

> diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
> index 28977d10e60b6..b35ecb01697b8 100644
> --- a/kernel/trace/trace_events_filter.c
> +++ b/kernel/trace/trace_events_filter.c
> @@ -2337,7 +2337,7 @@ static int process_system_preds(struct trace_subsystem_dir *dir,
>  	struct filter_list *filter_item;
>  	struct event_filter *filter = NULL;
>  	struct filter_head *filter_list;
> -	bool fail = true;
> +	int ret = -ENOMEM;
>  	int err;
>  
>  	filter_list = kmalloc_obj(*filter_list);
> @@ -2364,8 +2364,10 @@ static int process_system_preds(struct trace_subsystem_dir *dir,
>  			filter_disable(file);
>  			parse_error(pe, FILT_ERR_BAD_SUBSYS_FILTER, 0);
>  			append_filter_err(tr, pe, filter);
> -		} else
> +		} else {
>  			event_set_filtered_flag(file);
> +			ret = 0;
> +		}
>  
>  
>  		filter_item = kzalloc_obj(*filter_item);
> @@ -2380,11 +2382,9 @@ static int process_system_preds(struct trace_subsystem_dir *dir,
>  		filter_item->filter = event_filter(file);
>  		event_set_filter(file, filter);
>  		filter = NULL;
> -
> -		fail = false;
>  	}
>  
> -	if (fail)
> +	if (ret)
>  		goto fail;
>  
>  	/*
> @@ -2396,19 +2396,18 @@ static int process_system_preds(struct trace_subsystem_dir *dir,
>  	return 0;
>   fail:
>  	/* No call succeeded */
> -	free_filter_list(filter_list);
>  	parse_error(pe, FILT_ERR_BAD_SUBSYS_FILTER, 0);
> -	return -EINVAL;
> +	ret = -EINVAL;
>   fail_mem:
>  	__free_filter(filter);
>  
> -	/* If any call succeeded, we still need to sync */
> -	if (!fail)
> +	/* If any filter was replaced, we still need to sync */
> +	if (!list_empty(&filter_list->list))
>  		delay_free_filter(filter_list);
>  	else
>  		free_filter_list(filter_list);
>  
> -	return -ENOMEM;
> +	return ret;

[Severity: Medium]
Can process_system_preds() return 0 instead of -ENOMEM when an allocation
fails after at least one event matches the filter?

In kernel/trace/trace_events_filter.c:process_system_preds(), ret is
initialized to -ENOMEM and cleared to 0 as soon as process_preds() succeeds
for an event:

	err = process_preds(file->event_call, filter_string, filter, pe);
	if (err) {
		...
	} else {
		event_set_filtered_flag(file);
		ret = 0;
	}

	filter_item = kzalloc_obj(*filter_item);
	if (!filter_item)
		goto fail_mem;

If kzalloc_obj(*filter_item) fails on that same iteration, or if
kzalloc_obj(*filter), kstrdup(), or kzalloc_obj(*filter_item) fails on a
subsequent event in the loop, jumping to fail_mem returns ret (which is now
0) instead of -ENOMEM.

That causes create_system_filter() and apply_subsystem_event_filter() to
treat the aborted update as a success, leaving the remaining events in the
subsystem without the new filter applied. Also, if kzalloc_obj(*filter_item)
fails right after event_set_filtered_flag(file) runs, EVENT_FILE_FL_FILTERED
is set and trace_buffered_event_enable() is called, while fail_mem frees the
new filter without installing it via event_set_filter(file, filter).

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/179323784538.740114.15323117974242744566.stgit@devnote2?part=2

  reply	other threads:[~2026-10-29  1:45 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-29  1:37 [PATCH v4 00/15] tracing/filters: Fix event filter parsing and matching bugs Masami Hiramatsu (Google)
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 [this message]
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=sashiko-outbox-188613@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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.