diff options
author | 2025-01-08 10:04:39 +0100 | |
---|---|---|
committer | 2025-03-10 11:54:44 +0100 | |
commit | 2ff49f8931be8bed53e65993fd1af68e3cd747cb (patch) | |
tree | 421019b12fb15c4a0d7bfd922bd887cc185b624e /kernel/module/version.c | |
parent | module: Remove module_assert_mutex_or_preempt() from try_add_tainted_module(). (diff) | |
download | wireguard-linux-2ff49f8931be8bed53e65993fd1af68e3cd747cb.tar.xz wireguard-linux-2ff49f8931be8bed53e65993fd1af68e3cd747cb.zip |
module: Use RCU in find_symbol().
module_assert_mutex_or_preempt() is not needed in find_symbol(). The
function checks for RCU-sched or the module_mutex to be acquired. The
list_for_each_entry_rcu() below does the same check.
Remove module_assert_mutex_or_preempt() from try_add_tainted_module().
Use RCU protection to invoke find_symbol() and 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-11-bigeasy@linutronix.de
Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
Diffstat (limited to 'kernel/module/version.c')
-rw-r--r-- | kernel/module/version.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/kernel/module/version.c b/kernel/module/version.c index 3718a8868321..2beefeba82d9 100644 --- a/kernel/module/version.c +++ b/kernel/module/version.c @@ -79,17 +79,17 @@ int check_modstruct_version(const struct load_info *info, .name = "module_layout", .gplok = true, }; + bool have_symbol; /* * Since this should be found in kernel (which can't be removed), no - * locking is necessary -- use preempt_disable() to placate lockdep. + * locking is necessary. Regardless use a RCU read section to keep + * lockdep happy. */ - preempt_disable(); - if (!find_symbol(&fsa)) { - preempt_enable(); - BUG(); - } - preempt_enable(); + scoped_guard(rcu) + have_symbol = find_symbol(&fsa); + BUG_ON(!have_symbol); + return check_version(info, "module_layout", mod, fsa.crc); } |