diff options
author | Christophe Leroy <christophe.leroy@csgroup.eu> | 2022-06-13 08:02:02 +0200 |
---|---|---|
committer | Luis Chamberlain <mcgrof@kernel.org> | 2022-07-11 10:49:14 -0700 |
commit | 07ade45a765bb7d7571f1a89ab8edfa4ce5e7268 (patch) | |
tree | bd526610e891d28401f765b6efac416634c3430d /kernel/module | |
parent | ecc726f1458e7aa50e120ff334f0a3be5cccd94c (diff) | |
download | linux-07ade45a765bb7d7571f1a89ab8edfa4ce5e7268.tar.gz linux-07ade45a765bb7d7571f1a89ab8edfa4ce5e7268.tar.bz2 linux-07ade45a765bb7d7571f1a89ab8edfa4ce5e7268.zip |
module: Increase readability of module_kallsyms_lookup_name()
module_kallsyms_lookup_name() has several exit conditions but
can't return immediately due to preempt_disable().
Refactor module_kallsyms_lookup_name() to allow returning from
anywhere, and reduce depth.
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Diffstat (limited to 'kernel/module')
-rw-r--r-- | kernel/module/kallsyms.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c index 6a74545fc8a1..f5c5c9175333 100644 --- a/kernel/module/kallsyms.c +++ b/kernel/module/kallsyms.c @@ -457,29 +457,39 @@ unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name) return 0; } -/* Look for this name: can be of form module:name. */ -unsigned long module_kallsyms_lookup_name(const char *name) +static unsigned long __module_kallsyms_lookup_name(const char *name) { struct module *mod; char *colon; - unsigned long ret = 0; - /* Don't lock: we're in enough trouble already. */ - preempt_disable(); colon = strnchr(name, MODULE_NAME_LEN, ':'); if (colon) { mod = find_module_all(name, colon - name, false); if (mod) - ret = find_kallsyms_symbol_value(mod, colon + 1); - } else { - list_for_each_entry_rcu(mod, &modules, list) { - if (mod->state == MODULE_STATE_UNFORMED) - continue; - ret = find_kallsyms_symbol_value(mod, name); - if (ret) - break; - } + return find_kallsyms_symbol_value(mod, colon + 1); + return 0; + } + + list_for_each_entry_rcu(mod, &modules, list) { + unsigned long ret; + + if (mod->state == MODULE_STATE_UNFORMED) + continue; + ret = find_kallsyms_symbol_value(mod, name); + if (ret) + return ret; } + return 0; +} + +/* Look for this name: can be of form module:name. */ +unsigned long module_kallsyms_lookup_name(const char *name) +{ + unsigned long ret; + + /* Don't lock: we're in enough trouble already. */ + preempt_disable(); + ret = __module_kallsyms_lookup_name(name); preempt_enable(); return ret; } |