Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

module: Use RCU in __find_kallsyms_symbol_value().

module::kallsyms can be accessed under RCU assumption.

Use rcu_dereference() to access module::kallsyms.
Update callers.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20250108090457.512198-8-bigeasy@linutronix.de
Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>

authored by

Sebastian Andrzej Siewior and committed by
Petr Pavlu
f27d8ed6 febaa65c

+4 -13
+4 -13
kernel/module/kallsyms.c
··· 407 407 static unsigned long __find_kallsyms_symbol_value(struct module *mod, const char *name) 408 408 { 409 409 unsigned int i; 410 - struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms); 410 + struct mod_kallsyms *kallsyms = rcu_dereference(mod->kallsyms); 411 411 412 412 for (i = 0; i < kallsyms->num_symtab; i++) { 413 413 const Elf_Sym *sym = &kallsyms->symtab[i]; ··· 447 447 /* Look for this name: can be of form module:name. */ 448 448 unsigned long module_kallsyms_lookup_name(const char *name) 449 449 { 450 - unsigned long ret; 451 - 452 450 /* Don't lock: we're in enough trouble already. */ 453 451 guard(rcu)(); 454 - preempt_disable(); 455 - ret = __module_kallsyms_lookup_name(name); 456 - preempt_enable(); 457 - return ret; 452 + return __module_kallsyms_lookup_name(name); 458 453 } 459 454 460 455 unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name) 461 456 { 462 - unsigned long ret; 463 - 464 - preempt_disable(); 465 - ret = __find_kallsyms_symbol_value(mod, name); 466 - preempt_enable(); 467 - return ret; 457 + guard(rcu)(); 458 + return __find_kallsyms_symbol_value(mod, name); 468 459 } 469 460 470 461 int module_kallsyms_on_each_symbol(const char *modname,