Re: [PATCH 10/13] module: pass struct find_symbol_args to find_symbol
From: Miroslav Benes <mbenes@suse.cz>
Date: 2021-02-02 18:00:34
Also in:
dri-devel, linux-kbuild, live-patching, lkml
From: Miroslav Benes <mbenes@suse.cz>
Date: 2021-02-02 18:00:34
Also in:
dri-devel, linux-kbuild, live-patching, lkml
void *__symbol_get(const char *symbol)
{
- struct module *owner;
- const struct kernel_symbol *sym;
+ struct find_symbol_arg fsa = {
+ .name = symbol,
+ .gplok = true,
+ .warn = true,
+ };
preempt_disable();
- sym = find_symbol(symbol, &owner, NULL, NULL, true, true);
- if (sym && strong_try_module_get(owner))
- sym = NULL;
+ if (!find_symbol(&fsa) || !strong_try_module_get(fsa.owner)) {
I think this should be in fact
if (!find_symbol(&fsa) || strong_try_module_get(fsa.owner)) {
to get the logic right (note the missing !). We want to return NULL if
strong_try_module_get() does not succeed for a found symbol.
+ preempt_enable(); + return NULL; + } preempt_enable(); - - return sym ? (void *)kernel_symbol_value(sym) : NULL; + return (void *)kernel_symbol_value(fsa.sym); } EXPORT_SYMBOL_GPL(__symbol_get);
Miroslav