]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
kallsyms: prevent module removal when printing module name and buildid
authorPetr Mladek <pmladek@suse.com>
Fri, 28 Nov 2025 13:59:20 +0000 (14:59 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 21 Jan 2026 03:44:23 +0000 (19:44 -0800)
kallsyms_lookup_buildid() copies the symbol name into the given buffer so
that it can be safely read anytime later.  But it just copies pointers to
mod->name and mod->build_id which might get reused after the related
struct module gets removed.

The lifetime of struct module is synchronized using RCU.  Take the rcu
read lock for the entire __sprint_symbol().

Link: https://lkml.kernel.org/r/20251128135920.217303-8-pmladek@suse.com
Signed-off-by: Petr Mladek <pmladek@suse.com>
Reviewed-by: Aaron Tomlin <atomlin@atomlin.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Daniel Borkman <daniel@iogearbox.net>
Cc: Daniel Gomez <da.gomez@samsung.com>
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: Petr Pavlu <petr.pavlu@suse.com>
Cc: Sami Tolvanen <samitolvanen@google.com>
Cc: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
kernel/kallsyms.c

index 0f639c907336383041e752d491a24741227666df..e0813ca9469a3dd3abbc2f27e11314826d644e1b 100644 (file)
@@ -474,6 +474,9 @@ static int __sprint_symbol(char *buffer, unsigned long address,
        unsigned long offset, size;
        int len;
 
+       /* Prevent module removal until modname and modbuildid are printed */
+       guard(rcu)();
+
        address += symbol_offset;
        len = kallsyms_lookup_buildid(address, &size, &offset, &modname, &buildid,
                                       buffer);