From: Sasha Levin Date: Mon, 11 Dec 2023 02:05:11 +0000 (-0500) Subject: Drop tracing-kprobes-return-eaddrnotavail-when-func-match.patch X-Git-Tag: v6.6.6~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=92f60986aa0380df8af2cf74edf3ca12c98a3394;p=thirdparty%2Fkernel%2Fstable-queue.git Drop tracing-kprobes-return-eaddrnotavail-when-func-match.patch Signed-off-by: Sasha Levin --- diff --git a/queue-5.15/series b/queue-5.15/series index f79ccd17a6c..4e517a8235d 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -95,7 +95,6 @@ arm64-dts-mediatek-mt8173-evb-fix-regulator-fixed-node-names.patch arm64-dts-mediatek-mt8183-fix-unit-address-for-scp-reserved-memory.patch binder-fix-memory-leaks-of-spam-and-pending-work.patch kallsyms-make-kallsyms_on_each_symbol-generally-avai.patch -tracing-kprobes-return-eaddrnotavail-when-func-match.patch coresight-etm4x-make-etm4_remove_dev-return-void.patch coresight-etm4x-remove-bogous-__exit-annotation-for-.patch misc-mei-client.c-return-negative-error-code-in-mei_.patch diff --git a/queue-5.15/tracing-kprobes-return-eaddrnotavail-when-func-match.patch b/queue-5.15/tracing-kprobes-return-eaddrnotavail-when-func-match.patch deleted file mode 100644 index 5f954d2cd8c..00000000000 --- a/queue-5.15/tracing-kprobes-return-eaddrnotavail-when-func-match.patch +++ /dev/null @@ -1,146 +0,0 @@ -From 164d8ddbfff70475e9b3a87099a15ad04c97718d Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Fri, 20 Oct 2023 13:42:49 +0300 -Subject: tracing/kprobes: Return EADDRNOTAVAIL when func matches several - symbols - -From: Francis Laniel - -[ Upstream commit b022f0c7e404887a7c5229788fc99eff9f9a80d5 ] - -When a kprobe is attached to a function that's name is not unique (is -static and shares the name with other functions in the kernel), the -kprobe is attached to the first function it finds. This is a bug as the -function that it is attaching to is not necessarily the one that the -user wants to attach to. - -Instead of blindly picking a function to attach to what is ambiguous, -error with EADDRNOTAVAIL to let the user know that this function is not -unique, and that the user must use another unique function with an -address offset to get to the function they want to attach to. - -Link: https://lore.kernel.org/all/20231020104250.9537-2-flaniel@linux.microsoft.com/ - -Cc: stable@vger.kernel.org -Fixes: 413d37d1eb69 ("tracing: Add kprobe-based event tracer") -Suggested-by: Masami Hiramatsu -Signed-off-by: Francis Laniel -Link: https://lore.kernel.org/lkml/20230819101105.b0c104ae4494a7d1f2eea742@kernel.org/ -Acked-by: Masami Hiramatsu (Google) -Signed-off-by: Masami Hiramatsu (Google) -Signed-off-by: Sasha Levin ---- - kernel/trace/trace_kprobe.c | 63 +++++++++++++++++++++++++++++++++++++ - kernel/trace/trace_probe.h | 1 + - 2 files changed, 64 insertions(+) - -diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c -index 0b3ee4eea51bf..c686b2dd35934 100644 ---- a/kernel/trace/trace_kprobe.c -+++ b/kernel/trace/trace_kprobe.c -@@ -708,6 +708,25 @@ static struct notifier_block trace_kprobe_module_nb = { - .priority = 1 /* Invoked after kprobe module callback */ - }; - -+static int count_symbols(void *data, unsigned long unused) -+{ -+ unsigned int *count = data; -+ -+ (*count)++; -+ -+ return 0; -+} -+ -+static unsigned int number_of_same_symbols(char *func_name) -+{ -+ unsigned int count; -+ -+ count = 0; -+ kallsyms_on_each_match_symbol(count_symbols, func_name, &count); -+ -+ return count; -+} -+ - static int __trace_kprobe_create(int argc, const char *argv[]) - { - /* -@@ -836,6 +855,31 @@ static int __trace_kprobe_create(int argc, const char *argv[]) - } - } - -+ if (symbol && !strchr(symbol, ':')) { -+ unsigned int count; -+ -+ count = number_of_same_symbols(symbol); -+ if (count > 1) { -+ /* -+ * Users should use ADDR to remove the ambiguity of -+ * using KSYM only. -+ */ -+ trace_probe_log_err(0, NON_UNIQ_SYMBOL); -+ ret = -EADDRNOTAVAIL; -+ -+ goto error; -+ } else if (count == 0) { -+ /* -+ * We can return ENOENT earlier than when register the -+ * kprobe. -+ */ -+ trace_probe_log_err(0, BAD_PROBE_ADDR); -+ ret = -ENOENT; -+ -+ goto error; -+ } -+ } -+ - trace_probe_log_set_index(0); - if (event) { - ret = traceprobe_parse_event_name(&event, &group, buf, -@@ -1755,6 +1799,7 @@ static int unregister_kprobe_event(struct trace_kprobe *tk) - } - - #ifdef CONFIG_PERF_EVENTS -+ - /* create a trace_kprobe, but don't add it to global lists */ - struct trace_event_call * - create_local_trace_kprobe(char *func, void *addr, unsigned long offs, -@@ -1765,6 +1810,24 @@ create_local_trace_kprobe(char *func, void *addr, unsigned long offs, - int ret; - char *event; - -+ if (func) { -+ unsigned int count; -+ -+ count = number_of_same_symbols(func); -+ if (count > 1) -+ /* -+ * Users should use addr to remove the ambiguity of -+ * using func only. -+ */ -+ return ERR_PTR(-EADDRNOTAVAIL); -+ else if (count == 0) -+ /* -+ * We can return ENOENT earlier than when register the -+ * kprobe. -+ */ -+ return ERR_PTR(-ENOENT); -+ } -+ - /* - * local trace_kprobes are not added to dyn_event, so they are never - * searched in find_trace_kprobe(). Therefore, there is no concern of -diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h -index 0f0e5005b97a0..82e1df8aefcb3 100644 ---- a/kernel/trace/trace_probe.h -+++ b/kernel/trace/trace_probe.h -@@ -405,6 +405,7 @@ extern int traceprobe_define_arg_fields(struct trace_event_call *event_call, - C(BAD_MAXACT, "Invalid maxactive number"), \ - C(MAXACT_TOO_BIG, "Maxactive is too big"), \ - C(BAD_PROBE_ADDR, "Invalid probed address or symbol"), \ -+ C(NON_UNIQ_SYMBOL, "The symbol is not unique"), \ - C(BAD_RETPROBE, "Retprobe address must be an function entry"), \ - C(BAD_ADDR_SUFFIX, "Invalid probed address suffix"), \ - C(NO_GROUP_NAME, "Group name is not specified"), \ --- -2.42.0 -