Petr Pavlu 6dd717
From: Natalia Petrova <n.petrova@fintech.ru>
Petr Pavlu 6dd717
Date: Wed, 11 Jan 2023 15:04:09 +0300
Petr Pavlu 6dd717
Subject: trace_events_hist: add check for return value of 'create_hist_field'
Petr Pavlu 6dd717
Git-commit: 8b152e9150d07a885f95e1fd401fc81af202d9a4
Petr Pavlu 6dd717
Patch-mainline: v6.2-rc6
Petr Pavlu 6dd717
References: git-fixes
Petr Pavlu 6dd717
Petr Pavlu 6dd717
Function 'create_hist_field' is called recursively at
Petr Pavlu 6dd717
trace_events_hist.c:1954 and can return NULL-value that's why we have
Petr Pavlu 6dd717
to check it to avoid null pointer dereference.
Petr Pavlu 6dd717
Petr Pavlu 6dd717
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Petr Pavlu 6dd717
Petr Pavlu 6dd717
Link: https://lkml.kernel.org/r/20230111120409.4111-1-n.petrova@fintech.ru
Petr Pavlu 6dd717
Petr Pavlu 6dd717
Cc: stable@vger.kernel.org
Petr Pavlu 6dd717
Fixes: 30350d65ac56 ("tracing: Add variable support to hist triggers")
Petr Pavlu 6dd717
Signed-off-by: Natalia Petrova <n.petrova@fintech.ru>
Petr Pavlu 6dd717
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Petr Pavlu 6dd717
Acked-by: Petr Pavlu <petr.pavlu@suse.com>
Petr Pavlu 6dd717
---
Petr Pavlu 6dd717
 kernel/trace/trace_events_hist.c | 2 ++
Petr Pavlu 6dd717
 1 file changed, 2 insertions(+)
Petr Pavlu 6dd717
Petr Pavlu 6dd717
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
Petr Pavlu 6dd717
index fcaf226b7744..5edbf6b1da3f 100644
Petr Pavlu 6dd717
--- a/kernel/trace/trace_events_hist.c
Petr Pavlu 6dd717
+++ b/kernel/trace/trace_events_hist.c
Petr Pavlu 6dd717
@@ -1988,6 +1988,8 @@ static struct hist_field *create_hist_field(struct hist_trigger_data *hist_data,
Petr Pavlu 6dd717
 		unsigned long fl = flags & ~HIST_FIELD_FL_LOG2;
Petr Pavlu 6dd717
 		hist_field->fn = hist_field_log2;
Petr Pavlu 6dd717
 		hist_field->operands[0] = create_hist_field(hist_data, field, fl, NULL);
Petr Pavlu 6dd717
+		if (!hist_field->operands[0])
Petr Pavlu 6dd717
+			goto free;
Petr Pavlu 6dd717
 		hist_field->size = hist_field->operands[0]->size;
Petr Pavlu 6dd717
 		hist_field->type = kstrdup(hist_field->operands[0]->type, GFP_KERNEL);
Petr Pavlu 6dd717
 		if (!hist_field->type)
Petr Pavlu 6dd717