| From 26c563731056c3ee66f91106c3078a8c36bb7a9e Mon Sep 17 00:00:00 2001 |
| From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> |
| Date: Wed, 7 Jul 2021 11:08:21 -0400 |
| Subject: tracing/histograms: Fix parsing of "sym-offset" modifier |
| |
| From: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| |
| commit 26c563731056c3ee66f91106c3078a8c36bb7a9e upstream. |
| |
| With the addition of simple mathematical operations (plus and minus), the |
| parsing of the "sym-offset" modifier broke, as it took the '-' part of the |
| "sym-offset" as a minus, and tried to break it up into a mathematical |
| operation of "field.sym - offset", in which case it failed to parse |
| (unless the event had a field called "offset"). |
| |
| Both .sym and .sym-offset modifiers should not be entered into |
| mathematical calculations anyway. If ".sym-offset" is found in the |
| modifier, then simply make it not an operation that can be calculated on. |
| |
| Link: https://lkml.kernel.org/r/20210707110821.188ae255@oasis.local.home |
| |
| Cc: Ingo Molnar <mingo@kernel.org> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Cc: Masami Hiramatsu <mhiramat@kernel.org> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Daniel Bristot de Oliveira <bristot@redhat.com> |
| Cc: stable@vger.kernel.org |
| Fixes: 100719dcef447 ("tracing: Add simple expression support to hist triggers") |
| Reviewed-by: Tom Zanussi <zanussi@kernel.org> |
| Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/trace/trace_events_hist.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/kernel/trace/trace_events_hist.c |
| +++ b/kernel/trace/trace_events_hist.c |
| @@ -1539,6 +1539,13 @@ static int contains_operator(char *str) |
| |
| switch (*op) { |
| case '-': |
| + /* |
| + * Unfortunately, the modifier ".sym-offset" |
| + * can confuse things. |
| + */ |
| + if (op - str >= 4 && !strncmp(op - 4, ".sym-offset", 11)) |
| + return FIELD_OP_NONE; |
| + |
| if (*str == '-') |
| field_op = FIELD_OP_UNARY_MINUS; |
| else |