On Fri, 19 Aug 2022 21:40:37 -0400 Steven Rostedt rostedt@goodmis.org wrote:
From: "Steven Rostedt (Google)" rostedt@goodmis.org
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@vger.kernel.org Fixes: 7491e2c44278 ("tracing: Add a probe that attaches to trace events") Signed-off-by: Steven Rostedt (Google) rostedt@goodmis.org
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) &&
/* The type of $comm must be "string", and not an array. */ if (parg->count || (t && strcmp(t, "string"))) goto out;strcmp(arg, "$comm") == 0 || strncmp(arg, "\\\"", 2) == 0) {
-- 2.35.1