Currently, !fsa->gplok && syms->license == GPL_ONLY) is checked after bsearch() succeeds. It is meaningless to do the binary search in the GPL symbol table when fsa->gplok is false because we know find_exported_symbol_in_section() will fail anyway. This check should be done before bsearch().
Showing the changes to kernel/module (1 of 1 file). Show all
Unified · Split
| @@ -247,8 +247,6 @@ static bool check_exported_symbol(const struct symsearch *syms, · 246 unmodified lines | |||
| 247 | struct module *owner, unsigned int symnum, | 247 | struct module *owner, unsigned int symnum, |
| 248 | struct find_symbol_arg *fsa) | 248 | struct find_symbol_arg *fsa) |
| 249 | { | 249 | { |
| 250 | if (!fsa->gplok && syms->license == GPL_ONLY) | ||
| 251 | return false; | ||
| 252 | fsa->owner = owner; | 250 | fsa->owner = owner; |
| 253 | fsa->crc = symversion(syms->crcs, symnum); | 251 | fsa->crc = symversion(syms->crcs, symnum); |
| 254 | fsa->sym = &syms->start[symnum]; | 252 | fsa->sym = &syms->start[symnum]; |
| @@ -287,6 +285,9 @@ static bool find_exported_symbol_in_section(const struct symsearch *syms, · 32 unmodified lines | |||
| 287 | { | 285 | { |
| 288 | struct kernel_symbol *sym; | 286 | struct kernel_symbol *sym; |
| 289 | 287 | ||
| 288 | if (!fsa->gplok && syms->license == GPL_ONLY) | ||
| 289 | return false; | ||
| 290 | |||
| 290 | sym = bsearch(fsa->name, syms->start, syms->stop - syms->start, | 291 | sym = bsearch(fsa->name, syms->start, syms->stop - syms->start, |
| 291 | sizeof(struct kernel_symbol), cmp_name); | 292 | sizeof(struct kernel_symbol), cmp_name); |
| 292 | 293 | ||