Messages in this thread | | | Date | Tue, 2 Feb 2021 15:07:51 +0100 (CET) | From | Miroslav Benes <> | Subject | Re: [PATCH 10/13] module: pass struct find_symbol_args to find_symbol |
| |
> 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
| |