]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Drop tracing-kprobes-return-eaddrnotavail-when-func-match.patch
authorSasha Levin <sashal@kernel.org>
Mon, 11 Dec 2023 02:05:11 +0000 (21:05 -0500)
committerSasha Levin <sashal@kernel.org>
Mon, 11 Dec 2023 02:05:11 +0000 (21:05 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-5.15/series
queue-5.15/tracing-kprobes-return-eaddrnotavail-when-func-match.patch [deleted file]

index f79ccd17a6c54b0678a6de04ae05ddb5a15620c7..4e517a8235d911f91f15355840fe16ccfba48dc7 100644 (file)
@@ -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 (file)
index 5f954d2..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-From 164d8ddbfff70475e9b3a87099a15ad04c97718d Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-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>
-
-[ 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 <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: Sasha Levin <sashal@kernel.org>
----
- 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
-