On Fri, 19 Aug 2022 21:40:37 -0400 Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > From: "Steven Rostedt (Google)" <rostedt@xxxxxxxxxxx> > > The variable $comm is hard coded as a string, which is true for both > kprobes and uprobes, but for event probes (eprobes) it is a field name. In > most cases the "comm" field would be a string, but there's no guarantee of > that fact. > > Do not assume that comm is a string. Not to mention, it currently forces > comm fields to fault, as string processing for event probes is currently > broken. Indeed. There should be an event argument which names "comm". Eprobe might refer it. BTW, does eprobe use any special common fields? I originally introduced "$" variable for such special variables. Thank you, > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: 7491e2c44278 ("tracing: Add a probe that attaches to trace events") > Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> > --- > kernel/trace/trace_probe.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c > index dec657af363c..23dcd52ad45c 100644 > --- a/kernel/trace/trace_probe.c > +++ b/kernel/trace/trace_probe.c > @@ -622,9 +622,10 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size, > > /* > * Since $comm and immediate string can not be dereferenced, > - * we can find those by strcmp. > + * we can find those by strcmp. But ignore for eprobes. > */ > - if (strcmp(arg, "$comm") == 0 || strncmp(arg, "\\\"", 2) == 0) { > + if (!(flags & TPARG_FL_TPOINT) && > + strcmp(arg, "$comm") == 0 || strncmp(arg, "\\\"", 2) == 0) { > /* The type of $comm must be "string", and not an array. */ > if (parg->count || (t && strcmp(t, "string"))) > goto out; > -- > 2.35.1 -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>