From: Masami Hiramatsu (Google) <[email protected]>

Since $comm or $COMM are not event field but special fetcharg
variables to access current->comm, It should not be accessed
without '$' prefix even with typecast.

Fixes: 69efd863a785 ("tracing/eprobes: Allow use of BTF names to dereference 
pointers")
Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
---
 Changes in v8:
  - Newly added.
---
 kernel/trace/trace_probe.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
index c10bbb0df7b9..0da7c0b53ba7 100644
--- a/kernel/trace/trace_probe.c
+++ b/kernel/trace/trace_probe.c
@@ -342,10 +342,6 @@ static int parse_trace_event(char *arg, struct fetch_insn 
*code,
        ret = parse_trace_event_arg(arg, code, ctx);
        if (!ret)
                return 0;
-       if (strcmp(arg, "comm") == 0 || strcmp(arg, "COMM") == 0) {
-               code->op = FETCH_OP_COMM;
-               return 0;
-       }
        return -EINVAL;
 }
 
@@ -1065,8 +1061,14 @@ static int parse_probe_vars(char *orig_arg, const struct 
fetch_type *t,
        int len;
 
        if (ctx->flags & TPARG_FL_TEVENT) {
-               if (parse_trace_event(arg, code, ctx) < 0)
+               if (parse_trace_event(arg, code, ctx) < 0) {
+                       /* 'comm' should be checked after field parsing. */
+                       if (strcmp(arg, "comm") == 0 || strcmp(arg, "COMM") == 
0) {
+                               code->op = FETCH_OP_COMM;
+                               return 0;
+                       }
                        goto inval;
+               }
                return 0;
        }
 


Reply via email to