All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: sashiko-reviews@lists.linux.dev
Cc: linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH] tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields
Date: Tue, 13 Oct 2026 10:19:10 +0100	[thread overview]
Message-ID: <20261013091910.GD199624@google.com> (raw)
In-Reply-To: <sashiko-outbox-168379@kernel.org>

On Mon, 12 Oct 2026, sashiko-bot@kernel.org wrote:

> 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

Fixing now - v2 to follow shortly.  Bear with.

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

-- 
Lee Jones

      reply	other threads:[~2026-10-13  9:19 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
2026-10-13  9:19   ` Lee Jones [this message]

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=20261013091910.GD199624@google.com \
    --to=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.