@@ -495,6 +495,7 @@ struct find_symbol_arg {
495
495
struct module * owner ;
496
496
const s32 * crc ;
497
497
const struct kernel_symbol * sym ;
498
+ enum mod_license license ;
498
499
};
499
500
500
501
static bool check_exported_symbol (const struct symsearch * syms ,
@@ -528,6 +529,7 @@ static bool check_exported_symbol(const struct symsearch *syms,
528
529
fsa -> owner = owner ;
529
530
fsa -> crc = symversion (syms -> crcs , symnum );
530
531
fsa -> sym = & syms -> start [symnum ];
532
+ fsa -> license = syms -> license ;
531
533
return true;
532
534
}
533
535
@@ -587,6 +589,7 @@ static bool find_exported_symbol_in_section(const struct symsearch *syms,
587
589
static const struct kernel_symbol * find_symbol (const char * name ,
588
590
struct module * * owner ,
589
591
const s32 * * crc ,
592
+ enum mod_license * license ,
590
593
bool gplok ,
591
594
bool warn )
592
595
{
@@ -601,6 +604,8 @@ static const struct kernel_symbol *find_symbol(const char *name,
601
604
* owner = fsa .owner ;
602
605
if (crc )
603
606
* crc = fsa .crc ;
607
+ if (license )
608
+ * license = fsa .license ;
604
609
return fsa .sym ;
605
610
}
606
611
@@ -1074,7 +1079,7 @@ void __symbol_put(const char *symbol)
1074
1079
struct module * owner ;
1075
1080
1076
1081
preempt_disable ();
1077
- if (!find_symbol (symbol , & owner , NULL , true, false))
1082
+ if (!find_symbol (symbol , & owner , NULL , NULL , true, false))
1078
1083
BUG ();
1079
1084
module_put (owner );
1080
1085
preempt_enable ();
@@ -1352,7 +1357,7 @@ static inline int check_modstruct_version(const struct load_info *info,
1352
1357
* locking is necessary -- use preempt_disable() to placate lockdep.
1353
1358
*/
1354
1359
preempt_disable ();
1355
- if (!find_symbol ("module_layout" , NULL , & crc , true, false)) {
1360
+ if (!find_symbol ("module_layout" , NULL , & crc , NULL , true, false)) {
1356
1361
preempt_enable ();
1357
1362
BUG ();
1358
1363
}
@@ -1436,6 +1441,7 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod,
1436
1441
struct module * owner ;
1437
1442
const struct kernel_symbol * sym ;
1438
1443
const s32 * crc ;
1444
+ enum mod_license license ;
1439
1445
int err ;
1440
1446
1441
1447
/*
@@ -1445,7 +1451,7 @@ static const struct kernel_symbol *resolve_symbol(struct module *mod,
1445
1451
*/
1446
1452
sched_annotate_sleep ();
1447
1453
mutex_lock (& module_mutex );
1448
- sym = find_symbol (name , & owner , & crc ,
1454
+ sym = find_symbol (name , & owner , & crc , & license ,
1449
1455
!(mod -> taints & (1 << TAINT_PROPRIETARY_MODULE )), true);
1450
1456
if (!sym )
1451
1457
goto unlock ;
@@ -2213,7 +2219,7 @@ void *__symbol_get(const char *symbol)
2213
2219
const struct kernel_symbol * sym ;
2214
2220
2215
2221
preempt_disable ();
2216
- sym = find_symbol (symbol , & owner , NULL , true, true);
2222
+ sym = find_symbol (symbol , & owner , NULL , NULL , true, true);
2217
2223
if (sym && strong_try_module_get (owner ))
2218
2224
sym = NULL ;
2219
2225
preempt_enable ();
@@ -2249,7 +2255,7 @@ static int verify_exported_symbols(struct module *mod)
2249
2255
for (i = 0 ; i < ARRAY_SIZE (arr ); i ++ ) {
2250
2256
for (s = arr [i ].sym ; s < arr [i ].sym + arr [i ].num ; s ++ ) {
2251
2257
if (find_symbol (kernel_symbol_name (s ), & owner , NULL ,
2252
- true, false)) {
2258
+ NULL , true, false)) {
2253
2259
pr_err ("%s: exports duplicate symbol %s"
2254
2260
" (owned by %s)\n" ,
2255
2261
mod -> name , kernel_symbol_name (s ),
0 commit comments