lkml.org 
[lkml]   [2021]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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

\
 
 \ /
  Last update: 2021-02-02 19:01    [W:2.294 / U:0.028 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site