LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] tracing / histogram: Fix NULL pointer dereference on strcmp() on NULL event name
@ 2021-08-08  4:30 Steven Rostedt
  2021-08-11 14:35 ` Steven Rostedt
  0 siblings, 1 reply; 3+ messages in thread
From: Steven Rostedt @ 2021-08-08  4:30 UTC (permalink / raw)
  To: LKML; +Cc: Ingo Molnar, Andrew Morton, Tom Zanussi, Masami Hiramatsu

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

The following commands:

 # echo 'read_max u64 size;' > synthetic_events
 # echo 'hist:keys=common_pid:count=count:onmax($count).trace(read_max,count)' > events/syscalls/sys_enter_read/trigger

Causes:

 BUG: kernel NULL pointer dereference, address: 0000000000000000
 #PF: supervisor read access in kernel mode
 #PF: error_code(0x0000) - not-present page
 PGD 0 P4D 0
 Oops: 0000 [#1] PREEMPT SMP
 CPU: 4 PID: 1763 Comm: bash Not tainted 5.14.0-rc2-test+ #155
 Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01
v03.03 07/14/2016
 RIP: 0010:strcmp+0xc/0x20
 Code: 75 f7 31 c0 0f b6 0c 06 88 0c 02 48 83 c0 01 84 c9 75 f1 4c 89 c0
c3 0f 1f 80 00 00 00 00 31 c0 eb 08 48 83 c0 01 84 d2 74 0f <0f> b6 14 07
3a 14 06 74 ef 19 c0 83 c8 01 c3 31 c0 c3 66 90 48 89
 RSP: 0018:ffffb5fdc0963ca8 EFLAGS: 00010246
 RAX: 0000000000000000 RBX: ffffffffb3a4e040 RCX: 0000000000000000
 RDX: 0000000000000000 RSI: ffff9714c0d0b640 RDI: 0000000000000000
 RBP: 0000000000000000 R08: 00000022986b7cde R09: ffffffffb3a4dff8
 R10: 0000000000000000 R11: 0000000000000000 R12: ffff9714c50603c8
 R13: 0000000000000000 R14: ffff97143fdf9e48 R15: ffff9714c01a2210
 FS:  00007f1fa6785740(0000) GS:ffff9714da400000(0000)
knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
 CR2: 0000000000000000 CR3: 000000002d863004 CR4: 00000000001706e0
 Call Trace:
  __find_event_file+0x4e/0x80
  action_create+0x6b7/0xeb0
  ? kstrdup+0x44/0x60
  event_hist_trigger_func+0x1a07/0x2130
  trigger_process_regex+0xbd/0x110
  event_trigger_write+0x71/0xd0
  vfs_write+0xe9/0x310
  ksys_write+0x68/0xe0
  do_syscall_64+0x3b/0x90
  entry_SYSCALL_64_after_hwframe+0x44/0xae
 RIP: 0033:0x7f1fa6879e87

The problem was the "trace(read_max,count)" where the "count" should be
"$count" as "onmax()" only handles variables (although it really should be
able to figure out that "count" is a field of sys_enter_read). But there's
a path that does not find the variable and ends up passing a NULL for the
event, which ends up getting passed to "strcmp()".

Add a check for NULL to return and error on the command with:

 # cat error_log
  hist:syscalls:sys_enter_read: error: Couldn't create or find variable
  Command: hist:keys=common_pid:count=count:onmax($count).trace(read_max,count)
                                ^
Cc: stable@vger.kernel.org
Fixes: 50450603ec9cb tracing: Add 'onmax' hist trigger action support
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
 kernel/trace/trace_events_hist.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 949ef09dc537..a48aa2a2875b 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -3430,6 +3430,8 @@ trace_action_create_field_var(struct hist_trigger_data *hist_data,
 			event = data->match_data.event;
 		}
 
+		if (!event)
+			goto free;
 		/*
 		 * At this point, we're looking at a field on another
 		 * event.  Because we can't modify a hist trigger on
-- 
2.31.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] tracing / histogram: Fix NULL pointer dereference on strcmp() on NULL event name
  2021-08-08  4:30 [PATCH] tracing / histogram: Fix NULL pointer dereference on strcmp() on NULL event name Steven Rostedt
@ 2021-08-11 14:35 ` Steven Rostedt
  2021-08-11 15:29   ` Tom Zanussi
  0 siblings, 1 reply; 3+ messages in thread
From: Steven Rostedt @ 2021-08-11 14:35 UTC (permalink / raw)
  To: LKML; +Cc: Ingo Molnar, Andrew Morton, Tom Zanussi, Masami Hiramatsu

On Sun, 8 Aug 2021 00:30:11 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
> index 949ef09dc537..a48aa2a2875b 100644
> --- a/kernel/trace/trace_events_hist.c
> +++ b/kernel/trace/trace_events_hist.c
> @@ -3430,6 +3430,8 @@ trace_action_create_field_var(struct hist_trigger_data *hist_data,
>  			event = data->match_data.event;
>  		}
>  
> +		if (!event)
> +			goto free;
>  		/*
>  		 * At this point, we're looking at a field on another
>  		 * event.  Because we can't modify a hist trigger on
> -- 

Tom,

Is this OK? I'm going to start running this through my tests and when
it's done, I'm going to send it off to Linus.

-- Steve

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] tracing / histogram: Fix NULL pointer dereference on strcmp() on NULL event name
  2021-08-11 14:35 ` Steven Rostedt
@ 2021-08-11 15:29   ` Tom Zanussi
  0 siblings, 0 replies; 3+ messages in thread
From: Tom Zanussi @ 2021-08-11 15:29 UTC (permalink / raw)
  To: Steven Rostedt, LKML; +Cc: Ingo Molnar, Andrew Morton, Masami Hiramatsu

Hi Steve,

On Wed, 2021-08-11 at 10:35 -0400, Steven Rostedt wrote:
> On Sun, 8 Aug 2021 00:30:11 -0400
> Steven Rostedt <rostedt@goodmis.org> wrote:
> 
> > diff --git a/kernel/trace/trace_events_hist.c
> > b/kernel/trace/trace_events_hist.c
> > index 949ef09dc537..a48aa2a2875b 100644
> > --- a/kernel/trace/trace_events_hist.c
> > +++ b/kernel/trace/trace_events_hist.c
> > @@ -3430,6 +3430,8 @@ trace_action_create_field_var(struct
> > hist_trigger_data *hist_data,
> >  			event = data->match_data.event;
> >  		}
> >  
> > +		if (!event)
> > +			goto free;
> >  		/*
> >  		 * At this point, we're looking at a field on another
> >  		 * event.  Because we can't modify a hist trigger on
> > -- 
> 
> Tom,
> 
> Is this OK? I'm going to start running this through my tests and when
> it's done, I'm going to send it off to Linus.

Sorry, missed this one.

But yeah, this fixes the problem, thanks!

Reviewed-by: Tom Zanussi <zanussi@kernel.org>


> 
> -- Steve


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-08-11 15:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-08  4:30 [PATCH] tracing / histogram: Fix NULL pointer dereference on strcmp() on NULL event name Steven Rostedt
2021-08-11 14:35 ` Steven Rostedt
2021-08-11 15:29   ` Tom Zanussi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).