All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Lee Jones" <lee@kernel.org>
Cc: linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH] tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields
Date: Mon, 12 Oct 2026 16:13:54 +0000	[thread overview]
Message-ID: <sashiko-outbox-168379@kernel.org> (raw)
In-Reply-To: <20261012155805.1103972-1-lee@kernel.org>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] tracing: check_synth_field regression for __bitmask and stacktraces
- [High] tracing: arbitrary memory read via scalar to string synthetic field mapping
--

commit 4813d717e995df13871068dd6fd996711ca8965d
Author: Lee Jones <lee@kernel.org>

tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields

In check_synth_field(), when a synthetic event field is a stacktrace
and the histogram field is not a "long[" stacktrace array, validation falls
through to the generic size and signedness comparison.  This allows any
8-byte signed scalar histogram field to pass the fallback check and be
dereferenced as a kernel stacktrace pointer.  This commit attempts to reject
these mismatches by enforcing that field->is_stack matches the "long[" type.

> diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
> index 8af97fd4ee2d5..b09f5043e1543 100644
> --- a/kernel/trace/trace_events_hist.c
> +++ b/kernel/trace/trace_events_hist.c
> @@ -3946,7 +3946,10 @@ static int check_synth_field(struct synth_event *event,
>  	    && field->is_dynamic)
>  		return 0;
>  
> -	if (strstr(hist_field->type, "long[") && field->is_stack)
> +	if (!!strstr(hist_field->type, "long[") != field->is_stack)
> +		return -EINVAL;

[Severity: High]
Does this heuristic falsely match the long[ substring in __data_loc unsigned
long[] from __bitmask and __cpumask fields?

If is_stack == false, this logic seems to falsely reject valid mappings.

If is_stack == true, this appears to bypass validation and allow a 32-bit
__data_loc integer to be passed as the field value. Could this 32-bit integer
then be cast to a pointer and dereferenced in
trace_events_synth.c:get_field_size() and trace_stack(), potentially causing
a kernel panic?

> +
> +	if (field->is_stack)
>  		return 0;
>  
>  	if (strcmp(field->type, hist_field->type) != 0) {
>  		if (field->size != hist_field->size ||
>  		    (!field->is_string && field->is_signed != hist_field->is_signed))
>  			return -EINVAL;
>  	}

[Severity: High]
It looks like this fallback logic fails to reject a scalar-to-string mapping.

When creating a dynamic string synthetic field, its size is set to sizeof(u64)
and is_string is true.  Because field->size equals hist_field->size (8 bytes)
and !field->is_string short-circuits the type/signedness check, will an 8-byte
scalar successfully map to a dynamic string?

If an attacker-controlled scalar is passed, can it be cast to a kernel pointer
in trace_events_synth.c:trace_string() and used with fetch_store_strlen() to
arbitrarily read kernel memory?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261012155805.1103972-1-lee@kernel.org?part=1

  reply	other threads:[~2026-10-12 16:13 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-12 15:58 [PATCH] tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields Lee Jones
2026-10-12 16:13 ` sashiko-bot [this message]
2026-10-13  9:19   ` Lee Jones

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-168379@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=lee@kernel.org \
    --cc=linux-trace-kernel@vger.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.