| From 6c4cd030963fb01846355776511a5791e3e070ad Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 28 Nov 2025 14:59:16 +0100 |
| Subject: module: add helper function for reading module_buildid() |
| |
| From: Petr Mladek <pmladek@suse.com> |
| |
| [ Upstream commit acfdbb4ab2910ff6f03becb569c23ac7b2223913 ] |
| |
| Add a helper function for reading the optional "build_id" member of struct |
| module. It is going to be used also in ftrace_mod_address_lookup(). |
| |
| Use "#ifdef" instead of "#if IS_ENABLED()" to match the declaration of the |
| optional field in struct module. |
| |
| Link: https://lkml.kernel.org/r/20251128135920.217303-4-pmladek@suse.com |
| Signed-off-by: Petr Mladek <pmladek@suse.com> |
| Reviewed-by: Daniel Gomez <da.gomez@samsung.com> |
| Reviewed-by: Petr Pavlu <petr.pavlu@suse.com> |
| Cc: Aaron Tomlin <atomlin@atomlin.com> |
| Cc: Alexei Starovoitov <ast@kernel.org> |
| Cc: Daniel Borkman <daniel@iogearbox.net> |
| Cc: John Fastabend <john.fastabend@gmail.com> |
| Cc: Kees Cook <kees@kernel.org> |
| Cc: Luis Chamberalin <mcgrof@kernel.org> |
| Cc: Marc Rutland <mark.rutland@arm.com> |
| Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org> |
| Cc: Sami Tolvanen <samitolvanen@google.com> |
| Cc: Steven Rostedt (Google) <rostedt@goodmis.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Stable-dep-of: e8a1e7eaa19d ("kallsyms/ftrace: set module buildid in ftrace_mod_address_lookup()") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| include/linux/module.h | 9 +++++++++ |
| kernel/module/kallsyms.c | 9 ++------- |
| 2 files changed, 11 insertions(+), 7 deletions(-) |
| |
| diff --git a/include/linux/module.h b/include/linux/module.h |
| index 7886217c99881..1cb6f80e1b485 100644 |
| --- a/include/linux/module.h |
| +++ b/include/linux/module.h |
| @@ -750,6 +750,15 @@ static inline void __module_get(struct module *module) |
| __mod ? __mod->name : "kernel"; \ |
| }) |
| |
| +static inline const unsigned char *module_buildid(struct module *mod) |
| +{ |
| +#ifdef CONFIG_STACKTRACE_BUILD_ID |
| + return mod->build_id; |
| +#else |
| + return NULL; |
| +#endif |
| +} |
| + |
| /* Dereference module function descriptor */ |
| void *dereference_module_function_descriptor(struct module *mod, void *ptr); |
| |
| diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c |
| index bf65e0c3c86fc..30d0798f114f1 100644 |
| --- a/kernel/module/kallsyms.c |
| +++ b/kernel/module/kallsyms.c |
| @@ -337,13 +337,8 @@ int module_address_lookup(unsigned long addr, |
| if (mod) { |
| if (modname) |
| *modname = mod->name; |
| - if (modbuildid) { |
| -#if IS_ENABLED(CONFIG_STACKTRACE_BUILD_ID) |
| - *modbuildid = mod->build_id; |
| -#else |
| - *modbuildid = NULL; |
| -#endif |
| - } |
| + if (modbuildid) |
| + *modbuildid = module_buildid(mod); |
| |
| sym = find_kallsyms_symbol(mod, addr, size, offset); |
| |
| -- |
| 2.51.0 |
| |