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