From 40bb6714471f0ae188e80ec8b639c8feebabb241 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 3 Jan 2024 17:44:20 +0100 Subject: [PATCH] 6.1-stable patches 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 --- ...s_on_each_symbol-generally-available.patch | 62 ++++++++++++++++ queue-6.1/series | 2 + ...-logic-by-looking-at-modules-as-well.patch | 71 +++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 queue-6.1/kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch create mode 100644 queue-6.1/tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch 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 index 00000000000..e85b1a38a97 --- /dev/null +++ b/queue-6.1/kallsyms-make-module_kallsyms_on_each_symbol-generally-available.patch @@ -0,0 +1,62 @@ +From 73feb8d5fa3b755bb51077c0aabfb6aa556fd498 Mon Sep 17 00:00:00 2001 +From: Jiri Olsa +Date: Tue, 25 Oct 2022 15:41:41 +0200 +Subject: kallsyms: Make module_kallsyms_on_each_symbol generally available + +From: Jiri Olsa + +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 +Acked-by: Song Liu +Signed-off-by: Jiri Olsa +Link: https://lore.kernel.org/r/20221025134148.3300700-2-jolsa@kernel.org +Signed-off-by: Alexei Starovoitov +Signed-off-by: Greg Kroah-Hartman +--- + 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 */ diff --git a/queue-6.1/series b/queue-6.1/series index c5384d77934..78d569ce0aa 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -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 index 00000000000..5f41e302c9d --- /dev/null +++ b/queue-6.1/tracing-kprobes-fix-symbol-counting-logic-by-looking-at-modules-as-well.patch @@ -0,0 +1,71 @@ +From 926fe783c8a64b33997fec405cf1af3e61aed441 Mon Sep 17 00:00:00 2001 +From: Andrii Nakryiko +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 + +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 +Cc: stable@vger.kernel.org +Cc: Masami Hiramatsu +Cc: Steven Rostedt +Fixes: b022f0c7e404 ("tracing/kprobes: Return EADDRNOTAVAIL when func matches several symbols") +Signed-off-by: Andrii Nakryiko +Acked-by: Song Liu +Signed-off-by: Masami Hiramatsu (Google) +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Hao Wei Tee +Signed-off-by: Greg Kroah-Hartman +--- + 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[]) -- 2.47.3