]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Jan 2024 16:44:20 +0000 (17:44 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Jan 2024 16:44:20 +0000 (17:44 +0100)
added patches:
kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch
tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch

queue-6.1/kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch [new file with mode: 0644]
queue-6.1/series
queue-6.1/tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch [new file with mode: 0644]

diff --git a/queue-6.1/kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch b/queue-6.1/kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch
new file mode 100644 (file)
index 0000000..e85b1a3
--- /dev/null
@@ -0,0 +1,62 @@
+From 73feb8d5fa3b755bb51077c0aabfb6aa556fd498 Mon Sep 17 00:00:00 2001
+From: Jiri Olsa <jolsa@kernel.org>
+Date: Tue, 25 Oct 2022 15:41:41 +0200
+Subject: kallsyms: Make module_kallsyms_on_each_symbol generally available
+
+From: Jiri Olsa <jolsa@kernel.org>
+
+commit 73feb8d5fa3b755bb51077c0aabfb6aa556fd498 upstream.
+
+Making module_kallsyms_on_each_symbol generally available, so it
+can be used outside CONFIG_LIVEPATCH option in following changes.
+
+Rather than adding another ifdef option let's make the function
+generally available (when CONFIG_KALLSYMS and CONFIG_MODULES
+options are defined).
+
+Cc: Christoph Hellwig <hch@lst.de>
+Acked-by: Song Liu <song@kernel.org>
+Signed-off-by: Jiri Olsa <jolsa@kernel.org>
+Link: https://lore.kernel.org/r/20221025134148.3300700-2-jolsa@kernel.org
+Signed-off-by: Alexei Starovoitov <ast@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ include/linux/module.h   |    9 +++++++++
+ kernel/module/kallsyms.c |    2 --
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+--- a/include/linux/module.h
++++ b/include/linux/module.h
+@@ -879,8 +879,17 @@ static inline bool module_sig_ok(struct
+ }
+ #endif        /* CONFIG_MODULE_SIG */
++#if defined(CONFIG_MODULES) && defined(CONFIG_KALLSYMS)
+ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
+                                            struct module *, unsigned long),
+                                  void *data);
++#else
++static inline int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
++                                               struct module *, unsigned long),
++                                               void *data)
++{
++      return -EOPNOTSUPP;
++}
++#endif  /* CONFIG_MODULES && CONFIG_KALLSYMS */
+ #endif /* _LINUX_MODULE_H */
+--- a/kernel/module/kallsyms.c
++++ b/kernel/module/kallsyms.c
+@@ -494,7 +494,6 @@ unsigned long module_kallsyms_lookup_nam
+       return ret;
+ }
+-#ifdef CONFIG_LIVEPATCH
+ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
+                                            struct module *, unsigned long),
+                                  void *data)
+@@ -531,4 +530,3 @@ out:
+       mutex_unlock(&module_mutex);
+       return ret;
+ }
+-#endif /* CONFIG_LIVEPATCH */
index c5384d77934cce482ae31d78b652a613540a1ebd..78d569ce0aa91e63390a07e23ab438e6b34bafec 100644 (file)
@@ -96,3 +96,5 @@ ring-buffer-fix-slowpath-of-interrupted-event.patch
 nfsd-fix-possible-oops-when-nfsd-pool_stats-is-closed.patch
 spi-constify-spi-parameters-of-chip-select-apis.patch
 device-property-allow-const-parameter-to-dev_fwnode.patch
+kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch
+tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch
diff --git a/queue-6.1/tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch b/queue-6.1/tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch
new file mode 100644 (file)
index 0000000..5f41e30
--- /dev/null
@@ -0,0 +1,71 @@
+From 926fe783c8a64b33997fec405cf1af3e61aed441 Mon Sep 17 00:00:00 2001
+From: Andrii Nakryiko <andrii@kernel.org>
+Date: Fri, 27 Oct 2023 16:31:26 -0700
+Subject: tracing/kprobes: Fix symbol counting logic by looking at modules as well
+
+From: Andrii Nakryiko <andrii@kernel.org>
+
+commit 926fe783c8a64b33997fec405cf1af3e61aed441 upstream.
+
+Recent changes to count number of matching symbols when creating
+a kprobe event failed to take into account kernel modules. As such, it
+breaks kprobes on kernel module symbols, by assuming there is no match.
+
+Fix this my calling module_kallsyms_on_each_symbol() in addition to
+kallsyms_on_each_match_symbol() to perform a proper counting.
+
+Link: https://lore.kernel.org/all/20231027233126.2073148-1-andrii@kernel.org/
+
+Cc: Francis Laniel <flaniel@linux.microsoft.com>
+Cc: stable@vger.kernel.org
+Cc: Masami Hiramatsu <mhiramat@kernel.org>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Fixes: b022f0c7e404 ("tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols")
+Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
+Acked-by: Song Liu <song@kernel.org>
+Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Hao Wei Tee <angelsl@in04.sg>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/trace/trace_kprobe.c |   25 +++++++++++++++++++++----
+ 1 file changed, 21 insertions(+), 4 deletions(-)
+
+--- a/kernel/trace/trace_kprobe.c
++++ b/kernel/trace/trace_kprobe.c
+@@ -714,14 +714,31 @@ static int count_symbols(void *data, uns
+       return 0;
+ }
++struct sym_count_ctx {
++      unsigned int count;
++      const char *name;
++};
++
++static int count_mod_symbols(void *data, const char *name,
++                           struct module *module, unsigned long unused)
++{
++      struct sym_count_ctx *ctx = data;
++
++      if (strcmp(name, ctx->name) == 0)
++              ctx->count++;
++
++      return 0;
++}
++
+ static unsigned int number_of_same_symbols(char *func_name)
+ {
+-      unsigned int count;
++      struct sym_count_ctx ctx = { .count = 0, .name = func_name };
++
++      kallsyms_on_each_match_symbol(count_symbols, func_name, &ctx.count);
+-      count = 0;
+-      kallsyms_on_each_match_symbol(count_symbols, func_name, &count);
++      module_kallsyms_on_each_symbol(count_mod_symbols, &ctx);
+-      return count;
++      return ctx.count;
+ }
+ static int __trace_kprobe_create(int argc, const char *argv[])