The patch below does not apply to the 5.4-stable tree. If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <stable@xxxxxxxxxxxxxxx>. To reproduce the conflict and resubmit, you may use the following commands: git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.4.y git checkout FETCH_HEAD git cherry-pick -x 8c427cc2fa73684ea140999e121b7b6c1c717632 # <resolve conflicts, build, test, etc.> git commit -s git send-email --to '<stable@xxxxxxxxxxxxxxx>' --in-reply-to '2024021942-pursuit-privacy-b2c3@gregkh' --subject-prefix 'PATCH 5.4.y' HEAD^.. Possible dependencies: 8c427cc2fa73 ("tracing/probes: Fix to show a parse error for bad type for $comm") 27973e5c64b9 ("tracing/probes: Add string type check with BTF") d157d7694460 ("tracing/probes: Support BTF field access from $retval") c440adfbe302 ("tracing/probes: Support BTF based data structure field access") ebeed8d4a555 ("tracing/probes: Move finding func-proto API and getting func-param API to trace_btf") b1d1e90490b6 ("tracing/probes: Support BTF argument on module functions") 1f9f4f4777e7 ("tracing/probes: Fix to add NULL check for BTF APIs") 53431798f4bb ("tracing/probes: Fix tracepoint event with $arg* to fetch correct argument") fd26290ec89d ("tracing/probes: Add BTF retval type support") 18b1e870a496 ("tracing/probes: Add $arg* meta argument for all function args") b576e09701c7 ("tracing/probes: Support function parameters if BTF is available") 1b8b0cd754cd ("tracing/probes: Move event parameter fetching code to common parser") e2d0d7b2f42d ("tracing/probes: Add tracepoint support on fprobe_events") 334e5519c375 ("tracing/probes: Add fprobe events for tracing function entry and exit.") 30460c21ed40 ("tracing/probes: Avoid setting TPARG_FL_FENTRY and TPARG_FL_RETURN") d4505aa6afae ("tracing/probes: Reject symbol/symstr type for uprobe") b26a124cbfa8 ("tracing/probes: Add symstr type for dynamic events") 61b304b73ab4 ("tracing/fprobe: Fix to check whether fprobe is registered correctly") 752be5c5c910 ("tracing/eprobe: Add eprobe filter support") ab8384442ee5 ("tracing/probes: Have kprobes and uprobes use $COMM too") thanks, greg k-h ------------------ original commit in Linus's tree ------------------ >From 8c427cc2fa73684ea140999e121b7b6c1c717632 Mon Sep 17 00:00:00 2001 From: "Masami Hiramatsu (Google)" <mhiramat@xxxxxxxxxx> Date: Wed, 24 Jan 2024 00:02:34 +0900 Subject: [PATCH] tracing/probes: Fix to show a parse error for bad type for $comm Fix to show a parse error for bad type (non-string) for $comm/$COMM and immediate-string. With this fix, error_log file shows appropriate error message as below. /sys/kernel/tracing # echo 'p vfs_read $comm:u32' >> kprobe_events sh: write error: Invalid argument /sys/kernel/tracing # echo 'p vfs_read \"hoge":u32' >> kprobe_events sh: write error: Invalid argument /sys/kernel/tracing # cat error_log [ 30.144183] trace_kprobe: error: $comm and immediate-string only accepts string type Command: p vfs_read $comm:u32 ^ [ 62.618500] trace_kprobe: error: $comm and immediate-string only accepts string type Command: p vfs_read \"hoge":u32 ^ Link: https://lore.kernel.org/all/170602215411.215583.2238016352271091852.stgit@devnote2/ Fixes: 3dd1f7f24f8c ("tracing: probeevent: Fix to make the type of $comm string") Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 4dc74d73fc1d..c6da5923e5b9 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -1159,9 +1159,12 @@ static int traceprobe_parse_probe_arg_body(const char *argv, ssize_t *size, if (!(ctx->flags & TPARG_FL_TEVENT) && (strcmp(arg, "$comm") == 0 || 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"))) + /* The type of $comm must be "string", and not an array type. */ + if (parg->count || (t && strcmp(t, "string"))) { + trace_probe_log_err(ctx->offset + (t ? (t - arg) : 0), + NEED_STRING_TYPE); goto out; + } parg->type = find_fetch_type("string", ctx->flags); } else parg->type = find_fetch_type(t, ctx->flags); diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h index 850d9ecb6765..c1877d018269 100644 --- a/kernel/trace/trace_probe.h +++ b/kernel/trace/trace_probe.h @@ -515,7 +515,8 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call, C(BAD_HYPHEN, "Failed to parse single hyphen. Forgot '>'?"), \ C(NO_BTF_FIELD, "This field is not found."), \ C(BAD_BTF_TID, "Failed to get BTF type info."),\ - C(BAD_TYPE4STR, "This type does not fit for string."), + C(BAD_TYPE4STR, "This type does not fit for string."),\ + C(NEED_STRING_TYPE, "$comm and immediate-string only accepts string type"), #undef C #define C(a, b) TP_ERR_##a