* [PATCH 0/4] Minor v6.6 trace_events_filter fixes
@ 2023-09-01 15:10 Valentin Schneider
  2023-09-01 15:10 ` [PATCH 1/4] tracing/filters: Fix error-handling of cpulist parsing buffer Valentin Schneider
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Valentin Schneider @ 2023-09-01 15:10 UTC (permalink / raw)
  To: linux-kernel, linux-trace-kernel; +Cc: Steven Rostedt, Masami Hiramatsu
Hi,
These are small fixes incorporating feedback on the trace filters part of [1].
Based on top of trace-v6.6.
Cheers,
Valentin
[1]: https://lore.kernel.org/all/20230720163056.2564824-1-vschneid@redhat.com/
Valentin Schneider (4):
  tracing/filters: Fix error-handling of cpulist parsing buffer
  tracing/filters: Fix double-free of struct filter_pred.mask
  tracing/filters: Change parse_pred() cpulist ternary into an if block
  tracing/filters: Fix coding style issues
 kernel/trace/trace_events_filter.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)
--
2.31.1
^ permalink raw reply	[flat|nested] 5+ messages in thread
* [PATCH 1/4] tracing/filters: Fix error-handling of cpulist parsing buffer
  2023-09-01 15:10 [PATCH 0/4] Minor v6.6 trace_events_filter fixes Valentin Schneider
@ 2023-09-01 15:10 ` Valentin Schneider
  2023-09-01 15:10 ` [PATCH 2/4] tracing/filters: Fix double-free of struct filter_pred.mask Valentin Schneider
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Valentin Schneider @ 2023-09-01 15:10 UTC (permalink / raw)
  To: linux-kernel, linux-trace-kernel
  Cc: Steven Rostedt, Josh Poimboeuf, Masami Hiramatsu
parse_pred() allocates a string buffer to parse the user-provided cpulist,
but doesn't check the allocation result nor does it free the buffer once it
is no longer needed.
Add an allocation check, and free the buffer as soon as it is no longer
needed.
Reported-by: Steven Rostedt <rostedt@goodmis.org>
Reported-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Valentin Schneider <vschneid@redhat.com>
---
 kernel/trace/trace_events_filter.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 3a529214a21b7..c06e1d596f4b9 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -1744,17 +1744,23 @@ static int parse_pred(const char *str, void *data,
 
 		/* Copy the cpulist between { and } */
 		tmp = kmalloc((i - maskstart) + 1, GFP_KERNEL);
-		strscpy(tmp, str + maskstart, (i - maskstart) + 1);
+		if (!tmp)
+			goto err_mem;
 
+		strscpy(tmp, str + maskstart, (i - maskstart) + 1);
 		pred->mask = kzalloc(cpumask_size(), GFP_KERNEL);
-		if (!pred->mask)
+		if (!pred->mask) {
+			kfree(tmp);
 			goto err_mem;
+		}
 
 		/* Now parse it */
 		if (cpulist_parse(tmp, pred->mask)) {
+			kfree(tmp);
 			parse_error(pe, FILT_ERR_INVALID_CPULIST, pos + i);
 			goto err_free;
 		}
+		kfree(tmp);
 
 		/* Move along */
 		i++;
-- 
2.31.1
^ permalink raw reply related	[flat|nested] 5+ messages in thread
* [PATCH 2/4] tracing/filters: Fix double-free of struct filter_pred.mask
  2023-09-01 15:10 [PATCH 0/4] Minor v6.6 trace_events_filter fixes Valentin Schneider
  2023-09-01 15:10 ` [PATCH 1/4] tracing/filters: Fix error-handling of cpulist parsing buffer Valentin Schneider
@ 2023-09-01 15:10 ` Valentin Schneider
  2023-09-01 15:10 ` [PATCH 3/4] tracing/filters: Change parse_pred() cpulist ternary into an if block Valentin Schneider
  2023-09-01 15:10 ` [PATCH 4/4] tracing/filters: Fix coding style issues Valentin Schneider
  3 siblings, 0 replies; 5+ messages in thread
From: Valentin Schneider @ 2023-09-01 15:10 UTC (permalink / raw)
  To: linux-kernel, linux-trace-kernel; +Cc: Steven Rostedt, Masami Hiramatsu
When a cpulist filter is found to contain a single CPU, that CPU is saved
as a scalar and the backing cpumask storage is freed.
Also NULL the mask to avoid a double-free once we get down to
free_predicate().
Reported-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Valentin Schneider <vschneid@redhat.com>
---
 kernel/trace/trace_events_filter.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index c06e1d596f4b9..eb331e8b00b61 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -1773,6 +1773,7 @@ static int parse_pred(const char *str, void *data,
 		if (single) {
 			pred->val = cpumask_first(pred->mask);
 			kfree(pred->mask);
+			pred->mask = NULL;
 		}
 
 		if (field->filter_type == FILTER_CPUMASK) {
-- 
2.31.1
^ permalink raw reply related	[flat|nested] 5+ messages in thread
* [PATCH 3/4] tracing/filters: Change parse_pred() cpulist ternary into an if block
  2023-09-01 15:10 [PATCH 0/4] Minor v6.6 trace_events_filter fixes Valentin Schneider
  2023-09-01 15:10 ` [PATCH 1/4] tracing/filters: Fix error-handling of cpulist parsing buffer Valentin Schneider
  2023-09-01 15:10 ` [PATCH 2/4] tracing/filters: Fix double-free of struct filter_pred.mask Valentin Schneider
@ 2023-09-01 15:10 ` Valentin Schneider
  2023-09-01 15:10 ` [PATCH 4/4] tracing/filters: Fix coding style issues Valentin Schneider
  3 siblings, 0 replies; 5+ messages in thread
From: Valentin Schneider @ 2023-09-01 15:10 UTC (permalink / raw)
  To: linux-kernel, linux-trace-kernel; +Cc: Steven Rostedt, Masami Hiramatsu
Review comments noted that an if block would be clearer than a ternary, so
swap it out.
No change in behaviour intended
Signed-off-by: Valentin Schneider <vschneid@redhat.com>
---
 kernel/trace/trace_events_filter.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index eb331e8b00b61..09b4733a2933d 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -1782,13 +1782,17 @@ static int parse_pred(const char *str, void *data,
 				FILTER_PRED_FN_CPUMASK;
 		} else if (field->filter_type == FILTER_CPU) {
 			if (single) {
-				pred->op = pred->op == OP_BAND ? OP_EQ : pred->op;
+				if (pred->op == OP_BAND)
+					pred->op = OP_EQ;
+
 				pred->fn_num = FILTER_PRED_FN_CPU;
 			} else {
 				pred->fn_num = FILTER_PRED_FN_CPU_CPUMASK;
 			}
 		} else if (single) {
-			pred->op = pred->op == OP_BAND ? OP_EQ : pred->op;
+			if (pred->op == OP_BAND)
+				pred->op = OP_EQ;
+
 			pred->fn_num = select_comparison_fn(pred->op, field->size, false);
 			if (pred->op == OP_NE)
 				pred->not = 1;
-- 
2.31.1
^ permalink raw reply related	[flat|nested] 5+ messages in thread
* [PATCH 4/4] tracing/filters: Fix coding style issues
  2023-09-01 15:10 [PATCH 0/4] Minor v6.6 trace_events_filter fixes Valentin Schneider
                   ` (2 preceding siblings ...)
  2023-09-01 15:10 ` [PATCH 3/4] tracing/filters: Change parse_pred() cpulist ternary into an if block Valentin Schneider
@ 2023-09-01 15:10 ` Valentin Schneider
  3 siblings, 0 replies; 5+ messages in thread
From: Valentin Schneider @ 2023-09-01 15:10 UTC (permalink / raw)
  To: linux-kernel, linux-trace-kernel; +Cc: Steven Rostedt, Masami Hiramatsu
Recent commits have introduced some coding style issues, fix those up.
Signed-off-by: Valentin Schneider <vschneid@redhat.com>
---
 kernel/trace/trace_events_filter.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 09b4733a2933d..33264e510d161 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -1360,7 +1360,7 @@ int filter_assign_type(const char *type)
 			return FILTER_DYN_STRING;
 		if (strstr(type, "cpumask_t"))
 			return FILTER_CPUMASK;
-		}
+	}
 
 	if (strstr(type, "__rel_loc") && strstr(type, "char"))
 		return FILTER_RDYN_STRING;
@@ -1731,7 +1731,9 @@ static int parse_pred(const char *str, void *data,
 		maskstart = i;
 
 		/* Walk the cpulist until closing } */
-		for (; str[i] && str[i] != '}'; i++);
+		for (; str[i] && str[i] != '}'; i++)
+			;
+
 		if (str[i] != '}') {
 			parse_error(pe, FILT_ERR_MISSING_BRACE_CLOSE, pos + i);
 			goto err_free;
-- 
2.31.1
^ permalink raw reply related	[flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-09-01 15:12 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-01 15:10 [PATCH 0/4] Minor v6.6 trace_events_filter fixes Valentin Schneider
2023-09-01 15:10 ` [PATCH 1/4] tracing/filters: Fix error-handling of cpulist parsing buffer Valentin Schneider
2023-09-01 15:10 ` [PATCH 2/4] tracing/filters: Fix double-free of struct filter_pred.mask Valentin Schneider
2023-09-01 15:10 ` [PATCH 3/4] tracing/filters: Change parse_pred() cpulist ternary into an if block Valentin Schneider
2023-09-01 15:10 ` [PATCH 4/4] tracing/filters: Fix coding style issues Valentin Schneider
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).