+++ /dev/null
-From stable+bounces-4746-greg=kroah.com@vger.kernel.org Tue Dec 5 19:29:59 2023
-From: Francis Laniel <flaniel@linux.microsoft.com>
-Date: Tue, 5 Dec 2023 19:29:23 +0100
-Subject: selftests/ftrace: Add new test case which checks non unique symbol
-To: stable@vger.kernel.org
-Cc: Greg KH <gregkh@linuxfoundation.org>, Francis Laniel <flaniel@linux.microsoft.com>, Masami Hiramatsu <mhiramat@kernel.org>
-Message-ID: <20231205182923.128898-2-flaniel@linux.microsoft.com>
-
-From: Francis Laniel <flaniel@linux.microsoft.com>
-
-Commit 03b80ff8023adae6780e491f66e932df8165e3a0 upstream.
-
-If name_show() is non unique, this test will try to install a kprobe on this
-function which should fail returning EADDRNOTAVAIL.
-On kernel where name_show() is not unique, this test is skipped.
-
-Link: https://lore.kernel.org/all/20231020104250.9537-3-flaniel@linux.microsoft.com/
-
-Cc: stable@vger.kernel.org
-Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
-Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc | 13 ++++++++++
- 1 file changed, 13 insertions(+)
- create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc
-
---- /dev/null
-+++ b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc
-@@ -0,0 +1,13 @@
-+#!/bin/sh
-+# SPDX-License-Identifier: GPL-2.0
-+# description: Test failure of registering kprobe on non unique symbol
-+# requires: kprobe_events
-+
-+SYMBOL='name_show'
-+
-+# We skip this test on kernel where SYMBOL is unique or does not exist.
-+if [ "$(grep -c -E "[[:alnum:]]+ t ${SYMBOL}" /proc/kallsyms)" -le '1' ]; then
-+ exit_unsupported
-+fi
-+
-+! echo "p:test_non_unique ${SYMBOL}" > kprobe_events
net-9p-avoid-freeing-uninit-memory-in-p9pdu_vreadf.patch
net-rfkill-gpio-set-gpio-direction.patch
dm-integrity-don-t-modify-bio-s-immutable-bio_vec-in-integrity_metadata.patch
-tracing-kprobes-return-eaddrnotavail-when-func-matches-several-symbols.patch
-selftests-ftrace-add-new-test-case-which-checks-non-unique-symbol.patch
+++ /dev/null
-From stable+bounces-4745-greg=kroah.com@vger.kernel.org Tue Dec 5 19:29:57 2023
-From: Francis Laniel <flaniel@linux.microsoft.com>
-Date: Tue, 5 Dec 2023 19:29:22 +0100
-Subject: tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols
-To: stable@vger.kernel.org
-Cc: Greg KH <gregkh@linuxfoundation.org>, Francis Laniel <flaniel@linux.microsoft.com>, Masami Hiramatsu <mhiramat@kernel.org>
-Message-ID: <20231205182923.128898-1-flaniel@linux.microsoft.com>
-
-From: Francis Laniel <flaniel@linux.microsoft.com>
-
-Commit b022f0c7e404887a7c5229788fc99eff9f9a80d5 upstream.
-
-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 <mhiramat@kernel.org>
-Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
-Link: https://lore.kernel.org/lkml/20230819101105.b0c104ae4494a7d1f2eea742@kernel.org/
-Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-(cherry picked from commit b022f0c7e404887a7c5229788fc99eff9f9a80d5)
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- kernel/trace/trace_kprobe.c | 48 ++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 48 insertions(+)
-
---- a/kernel/trace/trace_kprobe.c
-+++ b/kernel/trace/trace_kprobe.c
-@@ -617,6 +617,36 @@ static inline void sanitize_event_name(c
- *name = '_';
- }
-
-+struct count_symbols_struct {
-+ const char *func_name;
-+ unsigned int count;
-+};
-+
-+static int count_symbols(void *data, const char *name, struct module *unused0,
-+ unsigned long unused1)
-+{
-+ struct count_symbols_struct *args = data;
-+
-+ if (strcmp(args->func_name, name))
-+ return 0;
-+
-+ args->count++;
-+
-+ return 0;
-+}
-+
-+static unsigned int number_of_same_symbols(char *func_name)
-+{
-+ struct count_symbols_struct args = {
-+ .func_name = func_name,
-+ .count = 0,
-+ };
-+
-+ kallsyms_on_each_symbol(count_symbols, &args);
-+
-+ return args.count;
-+}
-+
- static int create_trace_kprobe(int argc, char **argv)
- {
- /*
-@@ -746,6 +776,24 @@ static int create_trace_kprobe(int argc,
- }
- argc -= 2; argv += 2;
-
-+ 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.
-+ */
-+ return -EADDRNOTAVAIL;
-+ else if (count == 0)
-+ /*
-+ * We can return ENOENT earlier than when register the
-+ * kprobe.
-+ */
-+ return -ENOENT;
-+ }
-+
- /* setup a probe */
- if (!event) {
- /* Make a new event name */
usb-fotg210-hcd-delete-an-incorrect-bounds-test.patch
smb-client-fix-oob-in-smbcalcsize.patch
dm-integrity-don-t-modify-bio-s-immutable-bio_vec-in-integrity_metadata.patch
-tracing-kprobes-return-eaddrnotavail-when-func-matches-several-symbols.patch
+++ /dev/null
-From b022f0c7e404887a7c5229788fc99eff9f9a80d5 Mon Sep 17 00:00:00 2001
-From: Francis Laniel <flaniel@linux.microsoft.com>
-Date: Fri, 20 Oct 2023 13:42:49 +0300
-Subject: tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols
-
-From: Francis Laniel <flaniel@linux.microsoft.com>
-
-commit b022f0c7e404887a7c5229788fc99eff9f9a80d5 upstream.
-
-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 <mhiramat@kernel.org>
-Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
-Link: https://lore.kernel.org/lkml/20230819101105.b0c104ae4494a7d1f2eea742@kernel.org/
-Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- kernel/trace/trace_kprobe.c | 48 ++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 48 insertions(+)
-
---- a/kernel/trace/trace_kprobe.c
-+++ b/kernel/trace/trace_kprobe.c
-@@ -715,6 +715,36 @@ static inline void sanitize_event_name(c
- *name = '_';
- }
-
-+struct count_symbols_struct {
-+ const char *func_name;
-+ unsigned int count;
-+};
-+
-+static int count_symbols(void *data, const char *name, struct module *unused0,
-+ unsigned long unused1)
-+{
-+ struct count_symbols_struct *args = data;
-+
-+ if (strcmp(args->func_name, name))
-+ return 0;
-+
-+ args->count++;
-+
-+ return 0;
-+}
-+
-+static unsigned int number_of_same_symbols(char *func_name)
-+{
-+ struct count_symbols_struct args = {
-+ .func_name = func_name,
-+ .count = 0,
-+ };
-+
-+ kallsyms_on_each_symbol(count_symbols, &args);
-+
-+ return args.count;
-+}
-+
- static int create_trace_kprobe(int argc, char **argv)
- {
- /*
-@@ -845,6 +875,24 @@ static int create_trace_kprobe(int argc,
- }
- argc -= 2; argv += 2;
-
-+ 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.
-+ */
-+ return -EADDRNOTAVAIL;
-+ else if (count == 0)
-+ /*
-+ * We can return ENOENT earlier than when register the
-+ * kprobe.
-+ */
-+ return -ENOENT;
-+ }
-+
- /* setup a probe */
- if (!event) {
- /* Make a new event name */
tracing-fix-blocked-reader-of-snapshot-buffer.patch
netfilter-nf_tables-skip-set-commit-for-deleted-destroyed-sets.patch
dm-integrity-don-t-modify-bio-s-immutable-bio_vec-in-integrity_metadata.patch
-tracing-kprobes-return-eaddrnotavail-when-func-matches-several-symbols.patch
revert-mips-loongson64-enable-dma-noncoherent-support.patch
bluetooth-smp-fix-crash-when-receiving-new-connection-when-debug-is-enabled.patch
spi-atmel-fix-pdc-transfer-setup-bug.patch
+++ /dev/null
-From b022f0c7e404887a7c5229788fc99eff9f9a80d5 Mon Sep 17 00:00:00 2001
-From: Francis Laniel <flaniel@linux.microsoft.com>
-Date: Fri, 20 Oct 2023 13:42:49 +0300
-Subject: tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols
-
-From: Francis Laniel <flaniel@linux.microsoft.com>
-
-commit b022f0c7e404887a7c5229788fc99eff9f9a80d5 upstream.
-
-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 <mhiramat@kernel.org>
-Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
-Link: https://lore.kernel.org/lkml/20230819101105.b0c104ae4494a7d1f2eea742@kernel.org/
-Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- kernel/trace/trace_kprobe.c | 74 ++++++++++++++++++++++++++++++++++++++++++++
- kernel/trace/trace_probe.h | 1
- 2 files changed, 75 insertions(+)
-
---- a/kernel/trace/trace_kprobe.c
-+++ b/kernel/trace/trace_kprobe.c
-@@ -715,6 +715,36 @@ static inline void sanitize_event_name(c
- *name = '_';
- }
-
-+struct count_symbols_struct {
-+ const char *func_name;
-+ unsigned int count;
-+};
-+
-+static int count_symbols(void *data, const char *name, struct module *unused0,
-+ unsigned long unused1)
-+{
-+ struct count_symbols_struct *args = data;
-+
-+ if (strcmp(args->func_name, name))
-+ return 0;
-+
-+ args->count++;
-+
-+ return 0;
-+}
-+
-+static unsigned int number_of_same_symbols(char *func_name)
-+{
-+ struct count_symbols_struct args = {
-+ .func_name = func_name,
-+ .count = 0,
-+ };
-+
-+ kallsyms_on_each_symbol(count_symbols, &args);
-+
-+ return args.count;
-+}
-+
- static int trace_kprobe_create(int argc, const char *argv[])
- {
- /*
-@@ -842,6 +872,31 @@ static int trace_kprobe_create(int argc,
- }
- }
-
-+ 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,
-@@ -1805,6 +1860,7 @@ static int unregister_kprobe_event(struc
- }
-
- #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,
-@@ -1814,6 +1870,24 @@ create_local_trace_kprobe(char *func, vo
- 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
---- a/kernel/trace/trace_probe.h
-+++ b/kernel/trace/trace_probe.h
-@@ -390,6 +390,7 @@ extern int traceprobe_define_arg_fields(
- 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"), \
bus-ti-sysc-use-fsleep-instead-of-usleep_range-in-sy.patch
bus-ti-sysc-flush-posted-write-only-after-srst_udela.patch
ring-buffer-fix-wake-ups-when-buffer_percent-is-set-to-100.patch
-tracing-kprobes-return-eaddrnotavail-when-func-matches-several-symbols.patch
+++ /dev/null
-From b022f0c7e404887a7c5229788fc99eff9f9a80d5 Mon Sep 17 00:00:00 2001
-From: Francis Laniel <flaniel@linux.microsoft.com>
-Date: Fri, 20 Oct 2023 13:42:49 +0300
-Subject: tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols
-
-From: Francis Laniel <flaniel@linux.microsoft.com>
-
-commit b022f0c7e404887a7c5229788fc99eff9f9a80d5 upstream.
-
-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 <mhiramat@kernel.org>
-Signed-off-by: Francis Laniel <flaniel@linux.microsoft.com>
-Link: https://lore.kernel.org/lkml/20230819101105.b0c104ae4494a7d1f2eea742@kernel.org/
-Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- kernel/trace/trace_kprobe.c | 74 ++++++++++++++++++++++++++++++++++++++++++++
- kernel/trace/trace_probe.h | 1
- 2 files changed, 75 insertions(+)
-
---- a/kernel/trace/trace_kprobe.c
-+++ b/kernel/trace/trace_kprobe.c
-@@ -714,6 +714,36 @@ static inline void sanitize_event_name(c
- *name = '_';
- }
-
-+struct count_symbols_struct {
-+ const char *func_name;
-+ unsigned int count;
-+};
-+
-+static int count_symbols(void *data, const char *name, struct module *unused0,
-+ unsigned long unused1)
-+{
-+ struct count_symbols_struct *args = data;
-+
-+ if (strcmp(args->func_name, name))
-+ return 0;
-+
-+ args->count++;
-+
-+ return 0;
-+}
-+
-+static unsigned int number_of_same_symbols(char *func_name)
-+{
-+ struct count_symbols_struct args = {
-+ .func_name = func_name,
-+ .count = 0,
-+ };
-+
-+ kallsyms_on_each_symbol(count_symbols, &args);
-+
-+ return args.count;
-+}
-+
- static int trace_kprobe_create(int argc, const char *argv[])
- {
- /*
-@@ -825,6 +855,31 @@ static int trace_kprobe_create(int argc,
- }
- }
-
-+ 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,
-@@ -1596,6 +1651,7 @@ static int unregister_kprobe_event(struc
- }
-
- #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,
-@@ -1605,6 +1661,24 @@ create_local_trace_kprobe(char *func, vo
- 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
---- a/kernel/trace/trace_probe.h
-+++ b/kernel/trace/trace_probe.h
-@@ -403,6 +403,7 @@ extern int traceprobe_define_arg_fields(
- 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(NO_GROUP_NAME, "Group name is not specified"), \
- C(GROUP_TOO_LONG, "Group name is too long"), \