Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* Postprocess module symbol versions
2 *
3 * Copyright 2003 Kai Germaschewski
4 * Copyright 2002-2004 Rusty Russell, IBM Corporation
5 * Copyright 2006-2008 Sam Ravnborg
6 * Based in part on module-init-tools/depmod.c,file2alias
7 *
8 * This software may be used and distributed according to the terms
9 * of the GNU General Public License, incorporated herein by reference.
10 *
11 * Usage: modpost vmlinux module1.o module2.o ...
12 */
13
14#define _GNU_SOURCE
15#include <elf.h>
16#include <stdio.h>
17#include <ctype.h>
18#include <string.h>
19#include <limits.h>
20#include <stdbool.h>
21#include <errno.h>
22#include "modpost.h"
23#include "../../include/linux/license.h"
24
25/* Are we using CONFIG_MODVERSIONS? */
26static int modversions = 0;
27/* Warn about undefined symbols? (do so if we have vmlinux) */
28static int have_vmlinux = 0;
29/* Is CONFIG_MODULE_SRCVERSION_ALL set? */
30static int all_versions = 0;
31/* If we are modposting external module set to 1 */
32static int external_module = 0;
33/* Only warn about unresolved symbols */
34static int warn_unresolved = 0;
35/* How a symbol is exported */
36static int sec_mismatch_count = 0;
37static int sec_mismatch_fatal = 0;
38/* ignore missing files */
39static int ignore_missing_files;
40/* If set to 1, only warn (instead of error) about missing ns imports */
41static int allow_missing_ns_imports;
42
43enum export {
44 export_plain, export_unused, export_gpl,
45 export_unused_gpl, export_gpl_future, export_unknown
46};
47
48/* In kernel, this size is defined in linux/module.h;
49 * here we use Elf_Addr instead of long for covering cross-compile
50 */
51
52#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
53
54void __attribute__((format(printf, 2, 3)))
55modpost_log(enum loglevel loglevel, const char *fmt, ...)
56{
57 va_list arglist;
58
59 switch (loglevel) {
60 case LOG_WARN:
61 fprintf(stderr, "WARNING: ");
62 break;
63 case LOG_ERROR:
64 fprintf(stderr, "ERROR: ");
65 break;
66 case LOG_FATAL:
67 fprintf(stderr, "FATAL: ");
68 break;
69 default: /* invalid loglevel, ignore */
70 break;
71 }
72
73 fprintf(stderr, "modpost: ");
74
75 va_start(arglist, fmt);
76 vfprintf(stderr, fmt, arglist);
77 va_end(arglist);
78
79 if (loglevel == LOG_FATAL)
80 exit(1);
81}
82
83static inline bool strends(const char *str, const char *postfix)
84{
85 if (strlen(str) < strlen(postfix))
86 return false;
87
88 return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
89}
90
91void *do_nofail(void *ptr, const char *expr)
92{
93 if (!ptr)
94 fatal("Memory allocation failure: %s.\n", expr);
95
96 return ptr;
97}
98
99char *read_text_file(const char *filename)
100{
101 struct stat st;
102 size_t nbytes;
103 int fd;
104 char *buf;
105
106 fd = open(filename, O_RDONLY);
107 if (fd < 0) {
108 perror(filename);
109 exit(1);
110 }
111
112 if (fstat(fd, &st) < 0) {
113 perror(filename);
114 exit(1);
115 }
116
117 buf = NOFAIL(malloc(st.st_size + 1));
118
119 nbytes = st.st_size;
120
121 while (nbytes) {
122 ssize_t bytes_read;
123
124 bytes_read = read(fd, buf, nbytes);
125 if (bytes_read < 0) {
126 perror(filename);
127 exit(1);
128 }
129
130 nbytes -= bytes_read;
131 }
132 buf[st.st_size] = '\0';
133
134 close(fd);
135
136 return buf;
137}
138
139char *get_line(char **stringp)
140{
141 char *orig = *stringp, *next;
142
143 /* do not return the unwanted extra line at EOF */
144 if (!orig || *orig == '\0')
145 return NULL;
146
147 next = strchr(orig, '\n');
148 if (next)
149 *next++ = '\0';
150
151 *stringp = next;
152
153 return orig;
154}
155
156/* A list of all modules we processed */
157static struct module *modules;
158
159static struct module *find_module(const char *modname)
160{
161 struct module *mod;
162
163 for (mod = modules; mod; mod = mod->next)
164 if (strcmp(mod->name, modname) == 0)
165 break;
166 return mod;
167}
168
169static struct module *new_module(const char *modname)
170{
171 struct module *mod;
172
173 mod = NOFAIL(malloc(sizeof(*mod) + strlen(modname) + 1));
174 memset(mod, 0, sizeof(*mod));
175
176 /* add to list */
177 strcpy(mod->name, modname);
178 mod->is_vmlinux = (strcmp(modname, "vmlinux") == 0);
179 mod->gpl_compatible = -1;
180 mod->next = modules;
181 modules = mod;
182
183 if (mod->is_vmlinux)
184 have_vmlinux = 1;
185
186 return mod;
187}
188
189/* A hash of all exported symbols,
190 * struct symbol is also used for lists of unresolved symbols */
191
192#define SYMBOL_HASH_SIZE 1024
193
194struct symbol {
195 struct symbol *next;
196 struct module *module;
197 unsigned int crc;
198 int crc_valid;
199 char *namespace;
200 unsigned int weak:1;
201 unsigned int is_static:1; /* 1 if symbol is not global */
202 enum export export; /* Type of export */
203 char name[];
204};
205
206static struct symbol *symbolhash[SYMBOL_HASH_SIZE];
207
208/* This is based on the hash agorithm from gdbm, via tdb */
209static inline unsigned int tdb_hash(const char *name)
210{
211 unsigned value; /* Used to compute the hash value. */
212 unsigned i; /* Used to cycle through random values. */
213
214 /* Set the initial value from the key size. */
215 for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++)
216 value = (value + (((unsigned char *)name)[i] << (i*5 % 24)));
217
218 return (1103515243 * value + 12345);
219}
220
221/**
222 * Allocate a new symbols for use in the hash of exported symbols or
223 * the list of unresolved symbols per module
224 **/
225static struct symbol *alloc_symbol(const char *name, unsigned int weak,
226 struct symbol *next)
227{
228 struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
229
230 memset(s, 0, sizeof(*s));
231 strcpy(s->name, name);
232 s->weak = weak;
233 s->next = next;
234 s->is_static = 1;
235 return s;
236}
237
238/* For the hash of exported symbols */
239static struct symbol *new_symbol(const char *name, struct module *module,
240 enum export export)
241{
242 unsigned int hash;
243
244 hash = tdb_hash(name) % SYMBOL_HASH_SIZE;
245 symbolhash[hash] = alloc_symbol(name, 0, symbolhash[hash]);
246
247 return symbolhash[hash];
248}
249
250static struct symbol *find_symbol(const char *name)
251{
252 struct symbol *s;
253
254 /* For our purposes, .foo matches foo. PPC64 needs this. */
255 if (name[0] == '.')
256 name++;
257
258 for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
259 if (strcmp(s->name, name) == 0)
260 return s;
261 }
262 return NULL;
263}
264
265static bool contains_namespace(struct namespace_list *list,
266 const char *namespace)
267{
268 for (; list; list = list->next)
269 if (!strcmp(list->namespace, namespace))
270 return true;
271
272 return false;
273}
274
275static void add_namespace(struct namespace_list **list, const char *namespace)
276{
277 struct namespace_list *ns_entry;
278
279 if (!contains_namespace(*list, namespace)) {
280 ns_entry = NOFAIL(malloc(sizeof(struct namespace_list) +
281 strlen(namespace) + 1));
282 strcpy(ns_entry->namespace, namespace);
283 ns_entry->next = *list;
284 *list = ns_entry;
285 }
286}
287
288static bool module_imports_namespace(struct module *module,
289 const char *namespace)
290{
291 return contains_namespace(module->imported_namespaces, namespace);
292}
293
294static const struct {
295 const char *str;
296 enum export export;
297} export_list[] = {
298 { .str = "EXPORT_SYMBOL", .export = export_plain },
299 { .str = "EXPORT_UNUSED_SYMBOL", .export = export_unused },
300 { .str = "EXPORT_SYMBOL_GPL", .export = export_gpl },
301 { .str = "EXPORT_UNUSED_SYMBOL_GPL", .export = export_unused_gpl },
302 { .str = "EXPORT_SYMBOL_GPL_FUTURE", .export = export_gpl_future },
303 { .str = "(unknown)", .export = export_unknown },
304};
305
306
307static const char *export_str(enum export ex)
308{
309 return export_list[ex].str;
310}
311
312static enum export export_no(const char *s)
313{
314 int i;
315
316 if (!s)
317 return export_unknown;
318 for (i = 0; export_list[i].export != export_unknown; i++) {
319 if (strcmp(export_list[i].str, s) == 0)
320 return export_list[i].export;
321 }
322 return export_unknown;
323}
324
325static void *sym_get_data_by_offset(const struct elf_info *info,
326 unsigned int secindex, unsigned long offset)
327{
328 Elf_Shdr *sechdr = &info->sechdrs[secindex];
329
330 if (info->hdr->e_type != ET_REL)
331 offset -= sechdr->sh_addr;
332
333 return (void *)info->hdr + sechdr->sh_offset + offset;
334}
335
336static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)
337{
338 return sym_get_data_by_offset(info, get_secindex(info, sym),
339 sym->st_value);
340}
341
342static const char *sech_name(const struct elf_info *info, Elf_Shdr *sechdr)
343{
344 return sym_get_data_by_offset(info, info->secindex_strings,
345 sechdr->sh_name);
346}
347
348static const char *sec_name(const struct elf_info *info, int secindex)
349{
350 return sech_name(info, &info->sechdrs[secindex]);
351}
352
353#define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
354
355static enum export export_from_secname(struct elf_info *elf, unsigned int sec)
356{
357 const char *secname = sec_name(elf, sec);
358
359 if (strstarts(secname, "___ksymtab+"))
360 return export_plain;
361 else if (strstarts(secname, "___ksymtab_unused+"))
362 return export_unused;
363 else if (strstarts(secname, "___ksymtab_gpl+"))
364 return export_gpl;
365 else if (strstarts(secname, "___ksymtab_unused_gpl+"))
366 return export_unused_gpl;
367 else if (strstarts(secname, "___ksymtab_gpl_future+"))
368 return export_gpl_future;
369 else
370 return export_unknown;
371}
372
373static enum export export_from_sec(struct elf_info *elf, unsigned int sec)
374{
375 if (sec == elf->export_sec)
376 return export_plain;
377 else if (sec == elf->export_unused_sec)
378 return export_unused;
379 else if (sec == elf->export_gpl_sec)
380 return export_gpl;
381 else if (sec == elf->export_unused_gpl_sec)
382 return export_unused_gpl;
383 else if (sec == elf->export_gpl_future_sec)
384 return export_gpl_future;
385 else
386 return export_unknown;
387}
388
389static const char *namespace_from_kstrtabns(const struct elf_info *info,
390 const Elf_Sym *sym)
391{
392 const char *value = sym_get_data(info, sym);
393 return value[0] ? value : NULL;
394}
395
396static void sym_update_namespace(const char *symname, const char *namespace)
397{
398 struct symbol *s = find_symbol(symname);
399
400 /*
401 * That symbol should have been created earlier and thus this is
402 * actually an assertion.
403 */
404 if (!s) {
405 merror("Could not update namespace(%s) for symbol %s\n",
406 namespace, symname);
407 return;
408 }
409
410 free(s->namespace);
411 s->namespace =
412 namespace && namespace[0] ? NOFAIL(strdup(namespace)) : NULL;
413}
414
415/**
416 * Add an exported symbol - it may have already been added without a
417 * CRC, in this case just update the CRC
418 **/
419static struct symbol *sym_add_exported(const char *name, struct module *mod,
420 enum export export)
421{
422 struct symbol *s = find_symbol(name);
423
424 if (!s) {
425 s = new_symbol(name, mod, export);
426 } else if (!external_module || s->module->is_vmlinux ||
427 s->module == mod) {
428 warn("%s: '%s' exported twice. Previous export was in %s%s\n",
429 mod->name, name, s->module->name,
430 s->module->is_vmlinux ? "" : ".ko");
431 return s;
432 }
433
434 s->module = mod;
435 s->export = export;
436 return s;
437}
438
439static void sym_set_crc(const char *name, unsigned int crc)
440{
441 struct symbol *s = find_symbol(name);
442
443 /*
444 * Ignore stand-alone __crc_*, which might be auto-generated symbols
445 * such as __*_veneer in ARM ELF.
446 */
447 if (!s)
448 return;
449
450 s->crc = crc;
451 s->crc_valid = 1;
452}
453
454static void *grab_file(const char *filename, size_t *size)
455{
456 struct stat st;
457 void *map = MAP_FAILED;
458 int fd;
459
460 fd = open(filename, O_RDONLY);
461 if (fd < 0)
462 return NULL;
463 if (fstat(fd, &st))
464 goto failed;
465
466 *size = st.st_size;
467 map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
468
469failed:
470 close(fd);
471 if (map == MAP_FAILED)
472 return NULL;
473 return map;
474}
475
476static void release_file(void *file, size_t size)
477{
478 munmap(file, size);
479}
480
481static int parse_elf(struct elf_info *info, const char *filename)
482{
483 unsigned int i;
484 Elf_Ehdr *hdr;
485 Elf_Shdr *sechdrs;
486 Elf_Sym *sym;
487 const char *secstrings;
488 unsigned int symtab_idx = ~0U, symtab_shndx_idx = ~0U;
489
490 hdr = grab_file(filename, &info->size);
491 if (!hdr) {
492 if (ignore_missing_files) {
493 fprintf(stderr, "%s: %s (ignored)\n", filename,
494 strerror(errno));
495 return 0;
496 }
497 perror(filename);
498 exit(1);
499 }
500 info->hdr = hdr;
501 if (info->size < sizeof(*hdr)) {
502 /* file too small, assume this is an empty .o file */
503 return 0;
504 }
505 /* Is this a valid ELF file? */
506 if ((hdr->e_ident[EI_MAG0] != ELFMAG0) ||
507 (hdr->e_ident[EI_MAG1] != ELFMAG1) ||
508 (hdr->e_ident[EI_MAG2] != ELFMAG2) ||
509 (hdr->e_ident[EI_MAG3] != ELFMAG3)) {
510 /* Not an ELF file - silently ignore it */
511 return 0;
512 }
513 /* Fix endianness in ELF header */
514 hdr->e_type = TO_NATIVE(hdr->e_type);
515 hdr->e_machine = TO_NATIVE(hdr->e_machine);
516 hdr->e_version = TO_NATIVE(hdr->e_version);
517 hdr->e_entry = TO_NATIVE(hdr->e_entry);
518 hdr->e_phoff = TO_NATIVE(hdr->e_phoff);
519 hdr->e_shoff = TO_NATIVE(hdr->e_shoff);
520 hdr->e_flags = TO_NATIVE(hdr->e_flags);
521 hdr->e_ehsize = TO_NATIVE(hdr->e_ehsize);
522 hdr->e_phentsize = TO_NATIVE(hdr->e_phentsize);
523 hdr->e_phnum = TO_NATIVE(hdr->e_phnum);
524 hdr->e_shentsize = TO_NATIVE(hdr->e_shentsize);
525 hdr->e_shnum = TO_NATIVE(hdr->e_shnum);
526 hdr->e_shstrndx = TO_NATIVE(hdr->e_shstrndx);
527 sechdrs = (void *)hdr + hdr->e_shoff;
528 info->sechdrs = sechdrs;
529
530 /* Check if file offset is correct */
531 if (hdr->e_shoff > info->size) {
532 fatal("section header offset=%lu in file '%s' is bigger than filesize=%zu\n",
533 (unsigned long)hdr->e_shoff, filename, info->size);
534 return 0;
535 }
536
537 if (hdr->e_shnum == SHN_UNDEF) {
538 /*
539 * There are more than 64k sections,
540 * read count from .sh_size.
541 */
542 info->num_sections = TO_NATIVE(sechdrs[0].sh_size);
543 }
544 else {
545 info->num_sections = hdr->e_shnum;
546 }
547 if (hdr->e_shstrndx == SHN_XINDEX) {
548 info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link);
549 }
550 else {
551 info->secindex_strings = hdr->e_shstrndx;
552 }
553
554 /* Fix endianness in section headers */
555 for (i = 0; i < info->num_sections; i++) {
556 sechdrs[i].sh_name = TO_NATIVE(sechdrs[i].sh_name);
557 sechdrs[i].sh_type = TO_NATIVE(sechdrs[i].sh_type);
558 sechdrs[i].sh_flags = TO_NATIVE(sechdrs[i].sh_flags);
559 sechdrs[i].sh_addr = TO_NATIVE(sechdrs[i].sh_addr);
560 sechdrs[i].sh_offset = TO_NATIVE(sechdrs[i].sh_offset);
561 sechdrs[i].sh_size = TO_NATIVE(sechdrs[i].sh_size);
562 sechdrs[i].sh_link = TO_NATIVE(sechdrs[i].sh_link);
563 sechdrs[i].sh_info = TO_NATIVE(sechdrs[i].sh_info);
564 sechdrs[i].sh_addralign = TO_NATIVE(sechdrs[i].sh_addralign);
565 sechdrs[i].sh_entsize = TO_NATIVE(sechdrs[i].sh_entsize);
566 }
567 /* Find symbol table. */
568 secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset;
569 for (i = 1; i < info->num_sections; i++) {
570 const char *secname;
571 int nobits = sechdrs[i].sh_type == SHT_NOBITS;
572
573 if (!nobits && sechdrs[i].sh_offset > info->size) {
574 fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
575 "sizeof(*hrd)=%zu\n", filename,
576 (unsigned long)sechdrs[i].sh_offset,
577 sizeof(*hdr));
578 return 0;
579 }
580 secname = secstrings + sechdrs[i].sh_name;
581 if (strcmp(secname, ".modinfo") == 0) {
582 if (nobits)
583 fatal("%s has NOBITS .modinfo\n", filename);
584 info->modinfo = (void *)hdr + sechdrs[i].sh_offset;
585 info->modinfo_len = sechdrs[i].sh_size;
586 } else if (strcmp(secname, "__ksymtab") == 0)
587 info->export_sec = i;
588 else if (strcmp(secname, "__ksymtab_unused") == 0)
589 info->export_unused_sec = i;
590 else if (strcmp(secname, "__ksymtab_gpl") == 0)
591 info->export_gpl_sec = i;
592 else if (strcmp(secname, "__ksymtab_unused_gpl") == 0)
593 info->export_unused_gpl_sec = i;
594 else if (strcmp(secname, "__ksymtab_gpl_future") == 0)
595 info->export_gpl_future_sec = i;
596
597 if (sechdrs[i].sh_type == SHT_SYMTAB) {
598 unsigned int sh_link_idx;
599 symtab_idx = i;
600 info->symtab_start = (void *)hdr +
601 sechdrs[i].sh_offset;
602 info->symtab_stop = (void *)hdr +
603 sechdrs[i].sh_offset + sechdrs[i].sh_size;
604 sh_link_idx = sechdrs[i].sh_link;
605 info->strtab = (void *)hdr +
606 sechdrs[sh_link_idx].sh_offset;
607 }
608
609 /* 32bit section no. table? ("more than 64k sections") */
610 if (sechdrs[i].sh_type == SHT_SYMTAB_SHNDX) {
611 symtab_shndx_idx = i;
612 info->symtab_shndx_start = (void *)hdr +
613 sechdrs[i].sh_offset;
614 info->symtab_shndx_stop = (void *)hdr +
615 sechdrs[i].sh_offset + sechdrs[i].sh_size;
616 }
617 }
618 if (!info->symtab_start)
619 fatal("%s has no symtab?\n", filename);
620
621 /* Fix endianness in symbols */
622 for (sym = info->symtab_start; sym < info->symtab_stop; sym++) {
623 sym->st_shndx = TO_NATIVE(sym->st_shndx);
624 sym->st_name = TO_NATIVE(sym->st_name);
625 sym->st_value = TO_NATIVE(sym->st_value);
626 sym->st_size = TO_NATIVE(sym->st_size);
627 }
628
629 if (symtab_shndx_idx != ~0U) {
630 Elf32_Word *p;
631 if (symtab_idx != sechdrs[symtab_shndx_idx].sh_link)
632 fatal("%s: SYMTAB_SHNDX has bad sh_link: %u!=%u\n",
633 filename, sechdrs[symtab_shndx_idx].sh_link,
634 symtab_idx);
635 /* Fix endianness */
636 for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop;
637 p++)
638 *p = TO_NATIVE(*p);
639 }
640
641 return 1;
642}
643
644static void parse_elf_finish(struct elf_info *info)
645{
646 release_file(info->hdr, info->size);
647}
648
649static int ignore_undef_symbol(struct elf_info *info, const char *symname)
650{
651 /* ignore __this_module, it will be resolved shortly */
652 if (strcmp(symname, "__this_module") == 0)
653 return 1;
654 /* ignore global offset table */
655 if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0)
656 return 1;
657 if (info->hdr->e_machine == EM_PPC)
658 /* Special register function linked on all modules during final link of .ko */
659 if (strstarts(symname, "_restgpr_") ||
660 strstarts(symname, "_savegpr_") ||
661 strstarts(symname, "_rest32gpr_") ||
662 strstarts(symname, "_save32gpr_") ||
663 strstarts(symname, "_restvr_") ||
664 strstarts(symname, "_savevr_"))
665 return 1;
666 if (info->hdr->e_machine == EM_PPC64)
667 /* Special register function linked on all modules during final link of .ko */
668 if (strstarts(symname, "_restgpr0_") ||
669 strstarts(symname, "_savegpr0_") ||
670 strstarts(symname, "_restvr_") ||
671 strstarts(symname, "_savevr_") ||
672 strcmp(symname, ".TOC.") == 0)
673 return 1;
674 /* Do not ignore this symbol */
675 return 0;
676}
677
678static void handle_modversion(const struct module *mod,
679 const struct elf_info *info,
680 const Elf_Sym *sym, const char *symname)
681{
682 unsigned int crc;
683
684 if (sym->st_shndx == SHN_UNDEF) {
685 warn("EXPORT symbol \"%s\" [%s%s] version generation failed, symbol will not be versioned.\n",
686 symname, mod->name, mod->is_vmlinux ? "" : ".ko");
687 return;
688 }
689
690 if (sym->st_shndx == SHN_ABS) {
691 crc = sym->st_value;
692 } else {
693 unsigned int *crcp;
694
695 /* symbol points to the CRC in the ELF object */
696 crcp = sym_get_data(info, sym);
697 crc = TO_NATIVE(*crcp);
698 }
699 sym_set_crc(symname, crc);
700}
701
702static void handle_symbol(struct module *mod, struct elf_info *info,
703 const Elf_Sym *sym, const char *symname)
704{
705 enum export export;
706 const char *name;
707
708 if (strstarts(symname, "__ksymtab"))
709 export = export_from_secname(info, get_secindex(info, sym));
710 else
711 export = export_from_sec(info, get_secindex(info, sym));
712
713 switch (sym->st_shndx) {
714 case SHN_COMMON:
715 if (strstarts(symname, "__gnu_lto_")) {
716 /* Should warn here, but modpost runs before the linker */
717 } else
718 warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
719 break;
720 case SHN_UNDEF:
721 /* undefined symbol */
722 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
723 ELF_ST_BIND(sym->st_info) != STB_WEAK)
724 break;
725 if (ignore_undef_symbol(info, symname))
726 break;
727 if (info->hdr->e_machine == EM_SPARC ||
728 info->hdr->e_machine == EM_SPARCV9) {
729 /* Ignore register directives. */
730 if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
731 break;
732 if (symname[0] == '.') {
733 char *munged = NOFAIL(strdup(symname));
734 munged[0] = '_';
735 munged[1] = toupper(munged[1]);
736 symname = munged;
737 }
738 }
739
740 mod->unres = alloc_symbol(symname,
741 ELF_ST_BIND(sym->st_info) == STB_WEAK,
742 mod->unres);
743 break;
744 default:
745 /* All exported symbols */
746 if (strstarts(symname, "__ksymtab_")) {
747 name = symname + strlen("__ksymtab_");
748 sym_add_exported(name, mod, export);
749 }
750 if (strcmp(symname, "init_module") == 0)
751 mod->has_init = 1;
752 if (strcmp(symname, "cleanup_module") == 0)
753 mod->has_cleanup = 1;
754 break;
755 }
756}
757
758/**
759 * Parse tag=value strings from .modinfo section
760 **/
761static char *next_string(char *string, unsigned long *secsize)
762{
763 /* Skip non-zero chars */
764 while (string[0]) {
765 string++;
766 if ((*secsize)-- <= 1)
767 return NULL;
768 }
769
770 /* Skip any zero padding. */
771 while (!string[0]) {
772 string++;
773 if ((*secsize)-- <= 1)
774 return NULL;
775 }
776 return string;
777}
778
779static char *get_next_modinfo(struct elf_info *info, const char *tag,
780 char *prev)
781{
782 char *p;
783 unsigned int taglen = strlen(tag);
784 char *modinfo = info->modinfo;
785 unsigned long size = info->modinfo_len;
786
787 if (prev) {
788 size -= prev - modinfo;
789 modinfo = next_string(prev, &size);
790 }
791
792 for (p = modinfo; p; p = next_string(p, &size)) {
793 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
794 return p + taglen + 1;
795 }
796 return NULL;
797}
798
799static char *get_modinfo(struct elf_info *info, const char *tag)
800
801{
802 return get_next_modinfo(info, tag, NULL);
803}
804
805/**
806 * Test if string s ends in string sub
807 * return 0 if match
808 **/
809static int strrcmp(const char *s, const char *sub)
810{
811 int slen, sublen;
812
813 if (!s || !sub)
814 return 1;
815
816 slen = strlen(s);
817 sublen = strlen(sub);
818
819 if ((slen == 0) || (sublen == 0))
820 return 1;
821
822 if (sublen > slen)
823 return 1;
824
825 return memcmp(s + slen - sublen, sub, sublen);
826}
827
828static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
829{
830 if (sym)
831 return elf->strtab + sym->st_name;
832 else
833 return "(unknown)";
834}
835
836/* The pattern is an array of simple patterns.
837 * "foo" will match an exact string equal to "foo"
838 * "*foo" will match a string that ends with "foo"
839 * "foo*" will match a string that begins with "foo"
840 * "*foo*" will match a string that contains "foo"
841 */
842static int match(const char *sym, const char * const pat[])
843{
844 const char *p;
845 while (*pat) {
846 p = *pat++;
847 const char *endp = p + strlen(p) - 1;
848
849 /* "*foo*" */
850 if (*p == '*' && *endp == '*') {
851 char *bare = NOFAIL(strndup(p + 1, strlen(p) - 2));
852 char *here = strstr(sym, bare);
853
854 free(bare);
855 if (here != NULL)
856 return 1;
857 }
858 /* "*foo" */
859 else if (*p == '*') {
860 if (strrcmp(sym, p + 1) == 0)
861 return 1;
862 }
863 /* "foo*" */
864 else if (*endp == '*') {
865 if (strncmp(sym, p, strlen(p) - 1) == 0)
866 return 1;
867 }
868 /* no wildcards */
869 else {
870 if (strcmp(p, sym) == 0)
871 return 1;
872 }
873 }
874 /* no match */
875 return 0;
876}
877
878/* sections that we do not want to do full section mismatch check on */
879static const char *const section_white_list[] =
880{
881 ".comment*",
882 ".debug*",
883 ".cranges", /* sh64 */
884 ".zdebug*", /* Compressed debug sections. */
885 ".GCC.command.line", /* record-gcc-switches */
886 ".mdebug*", /* alpha, score, mips etc. */
887 ".pdr", /* alpha, score, mips etc. */
888 ".stab*",
889 ".note*",
890 ".got*",
891 ".toc*",
892 ".xt.prop", /* xtensa */
893 ".xt.lit", /* xtensa */
894 ".arcextmap*", /* arc */
895 ".gnu.linkonce.arcext*", /* arc : modules */
896 ".cmem*", /* EZchip */
897 ".fmt_slot*", /* EZchip */
898 ".gnu.lto*",
899 ".discard.*",
900 NULL
901};
902
903/*
904 * This is used to find sections missing the SHF_ALLOC flag.
905 * The cause of this is often a section specified in assembler
906 * without "ax" / "aw".
907 */
908static void check_section(const char *modname, struct elf_info *elf,
909 Elf_Shdr *sechdr)
910{
911 const char *sec = sech_name(elf, sechdr);
912
913 if (sechdr->sh_type == SHT_PROGBITS &&
914 !(sechdr->sh_flags & SHF_ALLOC) &&
915 !match(sec, section_white_list)) {
916 warn("%s (%s): unexpected non-allocatable section.\n"
917 "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
918 "Note that for example <linux/init.h> contains\n"
919 "section definitions for use in .S files.\n\n",
920 modname, sec);
921 }
922}
923
924
925
926#define ALL_INIT_DATA_SECTIONS \
927 ".init.setup", ".init.rodata", ".meminit.rodata", \
928 ".init.data", ".meminit.data"
929#define ALL_EXIT_DATA_SECTIONS \
930 ".exit.data", ".memexit.data"
931
932#define ALL_INIT_TEXT_SECTIONS \
933 ".init.text", ".meminit.text"
934#define ALL_EXIT_TEXT_SECTIONS \
935 ".exit.text", ".memexit.text"
936
937#define ALL_PCI_INIT_SECTIONS \
938 ".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
939 ".pci_fixup_enable", ".pci_fixup_resume", \
940 ".pci_fixup_resume_early", ".pci_fixup_suspend"
941
942#define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
943#define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
944
945#define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
946#define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
947
948#define DATA_SECTIONS ".data", ".data.rel"
949#define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
950 ".kprobes.text", ".cpuidle.text", ".noinstr.text"
951#define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
952 ".fixup", ".entry.text", ".exception.text", ".text.*", \
953 ".coldtext"
954
955#define INIT_SECTIONS ".init.*"
956#define MEM_INIT_SECTIONS ".meminit.*"
957
958#define EXIT_SECTIONS ".exit.*"
959#define MEM_EXIT_SECTIONS ".memexit.*"
960
961#define ALL_TEXT_SECTIONS ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
962 TEXT_SECTIONS, OTHER_TEXT_SECTIONS
963
964/* init data sections */
965static const char *const init_data_sections[] =
966 { ALL_INIT_DATA_SECTIONS, NULL };
967
968/* all init sections */
969static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
970
971/* All init and exit sections (code + data) */
972static const char *const init_exit_sections[] =
973 {ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL };
974
975/* all text sections */
976static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
977
978/* data section */
979static const char *const data_sections[] = { DATA_SECTIONS, NULL };
980
981
982/* symbols in .data that may refer to init/exit sections */
983#define DEFAULT_SYMBOL_WHITE_LIST \
984 "*driver", \
985 "*_template", /* scsi uses *_template a lot */ \
986 "*_timer", /* arm uses ops structures named _timer a lot */ \
987 "*_sht", /* scsi also used *_sht to some extent */ \
988 "*_ops", \
989 "*_probe", \
990 "*_probe_one", \
991 "*_console"
992
993static const char *const head_sections[] = { ".head.text*", NULL };
994static const char *const linker_symbols[] =
995 { "__init_begin", "_sinittext", "_einittext", NULL };
996static const char *const optim_symbols[] = { "*.constprop.*", NULL };
997
998enum mismatch {
999 TEXT_TO_ANY_INIT,
1000 DATA_TO_ANY_INIT,
1001 TEXT_TO_ANY_EXIT,
1002 DATA_TO_ANY_EXIT,
1003 XXXINIT_TO_SOME_INIT,
1004 XXXEXIT_TO_SOME_EXIT,
1005 ANY_INIT_TO_ANY_EXIT,
1006 ANY_EXIT_TO_ANY_INIT,
1007 EXPORT_TO_INIT_EXIT,
1008 EXTABLE_TO_NON_TEXT,
1009};
1010
1011/**
1012 * Describe how to match sections on different criterias:
1013 *
1014 * @fromsec: Array of sections to be matched.
1015 *
1016 * @bad_tosec: Relocations applied to a section in @fromsec to a section in
1017 * this array is forbidden (black-list). Can be empty.
1018 *
1019 * @good_tosec: Relocations applied to a section in @fromsec must be
1020 * targetting sections in this array (white-list). Can be empty.
1021 *
1022 * @mismatch: Type of mismatch.
1023 *
1024 * @symbol_white_list: Do not match a relocation to a symbol in this list
1025 * even if it is targetting a section in @bad_to_sec.
1026 *
1027 * @handler: Specific handler to call when a match is found. If NULL,
1028 * default_mismatch_handler() will be called.
1029 *
1030 */
1031struct sectioncheck {
1032 const char *fromsec[20];
1033 const char *bad_tosec[20];
1034 const char *good_tosec[20];
1035 enum mismatch mismatch;
1036 const char *symbol_white_list[20];
1037 void (*handler)(const char *modname, struct elf_info *elf,
1038 const struct sectioncheck* const mismatch,
1039 Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
1040
1041};
1042
1043static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
1044 const struct sectioncheck* const mismatch,
1045 Elf_Rela *r, Elf_Sym *sym,
1046 const char *fromsec);
1047
1048static const struct sectioncheck sectioncheck[] = {
1049/* Do not reference init/exit code/data from
1050 * normal code and data
1051 */
1052{
1053 .fromsec = { TEXT_SECTIONS, NULL },
1054 .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1055 .mismatch = TEXT_TO_ANY_INIT,
1056 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1057},
1058{
1059 .fromsec = { DATA_SECTIONS, NULL },
1060 .bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
1061 .mismatch = DATA_TO_ANY_INIT,
1062 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1063},
1064{
1065 .fromsec = { DATA_SECTIONS, NULL },
1066 .bad_tosec = { INIT_SECTIONS, NULL },
1067 .mismatch = DATA_TO_ANY_INIT,
1068 .symbol_white_list = {
1069 "*_template", "*_timer", "*_sht", "*_ops",
1070 "*_probe", "*_probe_one", "*_console", NULL
1071 },
1072},
1073{
1074 .fromsec = { TEXT_SECTIONS, NULL },
1075 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1076 .mismatch = TEXT_TO_ANY_EXIT,
1077 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1078},
1079{
1080 .fromsec = { DATA_SECTIONS, NULL },
1081 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1082 .mismatch = DATA_TO_ANY_EXIT,
1083 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1084},
1085/* Do not reference init code/data from meminit code/data */
1086{
1087 .fromsec = { ALL_XXXINIT_SECTIONS, NULL },
1088 .bad_tosec = { INIT_SECTIONS, NULL },
1089 .mismatch = XXXINIT_TO_SOME_INIT,
1090 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1091},
1092/* Do not reference exit code/data from memexit code/data */
1093{
1094 .fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
1095 .bad_tosec = { EXIT_SECTIONS, NULL },
1096 .mismatch = XXXEXIT_TO_SOME_EXIT,
1097 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1098},
1099/* Do not use exit code/data from init code */
1100{
1101 .fromsec = { ALL_INIT_SECTIONS, NULL },
1102 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1103 .mismatch = ANY_INIT_TO_ANY_EXIT,
1104 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1105},
1106/* Do not use init code/data from exit code */
1107{
1108 .fromsec = { ALL_EXIT_SECTIONS, NULL },
1109 .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1110 .mismatch = ANY_EXIT_TO_ANY_INIT,
1111 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1112},
1113{
1114 .fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
1115 .bad_tosec = { INIT_SECTIONS, NULL },
1116 .mismatch = ANY_INIT_TO_ANY_EXIT,
1117 .symbol_white_list = { NULL },
1118},
1119/* Do not export init/exit functions or data */
1120{
1121 .fromsec = { "__ksymtab*", NULL },
1122 .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
1123 .mismatch = EXPORT_TO_INIT_EXIT,
1124 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1125},
1126{
1127 .fromsec = { "__ex_table", NULL },
1128 /* If you're adding any new black-listed sections in here, consider
1129 * adding a special 'printer' for them in scripts/check_extable.
1130 */
1131 .bad_tosec = { ".altinstr_replacement", NULL },
1132 .good_tosec = {ALL_TEXT_SECTIONS , NULL},
1133 .mismatch = EXTABLE_TO_NON_TEXT,
1134 .handler = extable_mismatch_handler,
1135}
1136};
1137
1138static const struct sectioncheck *section_mismatch(
1139 const char *fromsec, const char *tosec)
1140{
1141 int i;
1142 int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
1143 const struct sectioncheck *check = §ioncheck[0];
1144
1145 /*
1146 * The target section could be the SHT_NUL section when we're
1147 * handling relocations to un-resolved symbols, trying to match it
1148 * doesn't make much sense and causes build failures on parisc
1149 * architectures.
1150 */
1151 if (*tosec == '\0')
1152 return NULL;
1153
1154 for (i = 0; i < elems; i++) {
1155 if (match(fromsec, check->fromsec)) {
1156 if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1157 return check;
1158 if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1159 return check;
1160 }
1161 check++;
1162 }
1163 return NULL;
1164}
1165
1166/**
1167 * Whitelist to allow certain references to pass with no warning.
1168 *
1169 * Pattern 1:
1170 * If a module parameter is declared __initdata and permissions=0
1171 * then this is legal despite the warning generated.
1172 * We cannot see value of permissions here, so just ignore
1173 * this pattern.
1174 * The pattern is identified by:
1175 * tosec = .init.data
1176 * fromsec = .data*
1177 * atsym =__param*
1178 *
1179 * Pattern 1a:
1180 * module_param_call() ops can refer to __init set function if permissions=0
1181 * The pattern is identified by:
1182 * tosec = .init.text
1183 * fromsec = .data*
1184 * atsym = __param_ops_*
1185 *
1186 * Pattern 2:
1187 * Many drivers utilise a *driver container with references to
1188 * add, remove, probe functions etc.
1189 * the pattern is identified by:
1190 * tosec = init or exit section
1191 * fromsec = data section
1192 * atsym = *driver, *_template, *_sht, *_ops, *_probe,
1193 * *probe_one, *_console, *_timer
1194 *
1195 * Pattern 3:
1196 * Whitelist all references from .head.text to any init section
1197 *
1198 * Pattern 4:
1199 * Some symbols belong to init section but still it is ok to reference
1200 * these from non-init sections as these symbols don't have any memory
1201 * allocated for them and symbol address and value are same. So even
1202 * if init section is freed, its ok to reference those symbols.
1203 * For ex. symbols marking the init section boundaries.
1204 * This pattern is identified by
1205 * refsymname = __init_begin, _sinittext, _einittext
1206 *
1207 * Pattern 5:
1208 * GCC may optimize static inlines when fed constant arg(s) resulting
1209 * in functions like cpumask_empty() -- generating an associated symbol
1210 * cpumask_empty.constprop.3 that appears in the audit. If the const that
1211 * is passed in comes from __init, like say nmi_ipi_mask, we get a
1212 * meaningless section warning. May need to add isra symbols too...
1213 * This pattern is identified by
1214 * tosec = init section
1215 * fromsec = text section
1216 * refsymname = *.constprop.*
1217 *
1218 * Pattern 6:
1219 * Hide section mismatch warnings for ELF local symbols. The goal
1220 * is to eliminate false positive modpost warnings caused by
1221 * compiler-generated ELF local symbol names such as ".LANCHOR1".
1222 * Autogenerated symbol names bypass modpost's "Pattern 2"
1223 * whitelisting, which relies on pattern-matching against symbol
1224 * names to work. (One situation where gcc can autogenerate ELF
1225 * local symbols is when "-fsection-anchors" is used.)
1226 **/
1227static int secref_whitelist(const struct sectioncheck *mismatch,
1228 const char *fromsec, const char *fromsym,
1229 const char *tosec, const char *tosym)
1230{
1231 /* Check for pattern 1 */
1232 if (match(tosec, init_data_sections) &&
1233 match(fromsec, data_sections) &&
1234 strstarts(fromsym, "__param"))
1235 return 0;
1236
1237 /* Check for pattern 1a */
1238 if (strcmp(tosec, ".init.text") == 0 &&
1239 match(fromsec, data_sections) &&
1240 strstarts(fromsym, "__param_ops_"))
1241 return 0;
1242
1243 /* Check for pattern 2 */
1244 if (match(tosec, init_exit_sections) &&
1245 match(fromsec, data_sections) &&
1246 match(fromsym, mismatch->symbol_white_list))
1247 return 0;
1248
1249 /* Check for pattern 3 */
1250 if (match(fromsec, head_sections) &&
1251 match(tosec, init_sections))
1252 return 0;
1253
1254 /* Check for pattern 4 */
1255 if (match(tosym, linker_symbols))
1256 return 0;
1257
1258 /* Check for pattern 5 */
1259 if (match(fromsec, text_sections) &&
1260 match(tosec, init_sections) &&
1261 match(fromsym, optim_symbols))
1262 return 0;
1263
1264 /* Check for pattern 6 */
1265 if (strstarts(fromsym, ".L"))
1266 return 0;
1267
1268 return 1;
1269}
1270
1271static inline int is_arm_mapping_symbol(const char *str)
1272{
1273 return str[0] == '$' && strchr("axtd", str[1])
1274 && (str[2] == '\0' || str[2] == '.');
1275}
1276
1277/*
1278 * If there's no name there, ignore it; likewise, ignore it if it's
1279 * one of the magic symbols emitted used by current ARM tools.
1280 *
1281 * Otherwise if find_symbols_between() returns those symbols, they'll
1282 * fail the whitelist tests and cause lots of false alarms ... fixable
1283 * only by merging __exit and __init sections into __text, bloating
1284 * the kernel (which is especially evil on embedded platforms).
1285 */
1286static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1287{
1288 const char *name = elf->strtab + sym->st_name;
1289
1290 if (!name || !strlen(name))
1291 return 0;
1292 return !is_arm_mapping_symbol(name);
1293}
1294
1295/**
1296 * Find symbol based on relocation record info.
1297 * In some cases the symbol supplied is a valid symbol so
1298 * return refsym. If st_name != 0 we assume this is a valid symbol.
1299 * In other cases the symbol needs to be looked up in the symbol table
1300 * based on section and address.
1301 * **/
1302static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1303 Elf_Sym *relsym)
1304{
1305 Elf_Sym *sym;
1306 Elf_Sym *near = NULL;
1307 Elf64_Sword distance = 20;
1308 Elf64_Sword d;
1309 unsigned int relsym_secindex;
1310
1311 if (relsym->st_name != 0)
1312 return relsym;
1313
1314 relsym_secindex = get_secindex(elf, relsym);
1315 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1316 if (get_secindex(elf, sym) != relsym_secindex)
1317 continue;
1318 if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1319 continue;
1320 if (!is_valid_name(elf, sym))
1321 continue;
1322 if (sym->st_value == addr)
1323 return sym;
1324 /* Find a symbol nearby - addr are maybe negative */
1325 d = sym->st_value - addr;
1326 if (d < 0)
1327 d = addr - sym->st_value;
1328 if (d < distance) {
1329 distance = d;
1330 near = sym;
1331 }
1332 }
1333 /* We need a close match */
1334 if (distance < 20)
1335 return near;
1336 else
1337 return NULL;
1338}
1339
1340/*
1341 * Find symbols before or equal addr and after addr - in the section sec.
1342 * If we find two symbols with equal offset prefer one with a valid name.
1343 * The ELF format may have a better way to detect what type of symbol
1344 * it is, but this works for now.
1345 **/
1346static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1347 const char *sec)
1348{
1349 Elf_Sym *sym;
1350 Elf_Sym *near = NULL;
1351 Elf_Addr distance = ~0;
1352
1353 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1354 const char *symsec;
1355
1356 if (is_shndx_special(sym->st_shndx))
1357 continue;
1358 symsec = sec_name(elf, get_secindex(elf, sym));
1359 if (strcmp(symsec, sec) != 0)
1360 continue;
1361 if (!is_valid_name(elf, sym))
1362 continue;
1363 if (sym->st_value <= addr) {
1364 if ((addr - sym->st_value) < distance) {
1365 distance = addr - sym->st_value;
1366 near = sym;
1367 } else if ((addr - sym->st_value) == distance) {
1368 near = sym;
1369 }
1370 }
1371 }
1372 return near;
1373}
1374
1375/*
1376 * Convert a section name to the function/data attribute
1377 * .init.text => __init
1378 * .memexitconst => __memconst
1379 * etc.
1380 *
1381 * The memory of returned value has been allocated on a heap. The user of this
1382 * method should free it after usage.
1383*/
1384static char *sec2annotation(const char *s)
1385{
1386 if (match(s, init_exit_sections)) {
1387 char *p = NOFAIL(malloc(20));
1388 char *r = p;
1389
1390 *p++ = '_';
1391 *p++ = '_';
1392 if (*s == '.')
1393 s++;
1394 while (*s && *s != '.')
1395 *p++ = *s++;
1396 *p = '\0';
1397 if (*s == '.')
1398 s++;
1399 if (strstr(s, "rodata") != NULL)
1400 strcat(p, "const ");
1401 else if (strstr(s, "data") != NULL)
1402 strcat(p, "data ");
1403 else
1404 strcat(p, " ");
1405 return r;
1406 } else {
1407 return NOFAIL(strdup(""));
1408 }
1409}
1410
1411static int is_function(Elf_Sym *sym)
1412{
1413 if (sym)
1414 return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1415 else
1416 return -1;
1417}
1418
1419static void print_section_list(const char * const list[20])
1420{
1421 const char *const *s = list;
1422
1423 while (*s) {
1424 fprintf(stderr, "%s", *s);
1425 s++;
1426 if (*s)
1427 fprintf(stderr, ", ");
1428 }
1429 fprintf(stderr, "\n");
1430}
1431
1432static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1433{
1434 switch (is_func) {
1435 case 0: *name = "variable"; *name_p = ""; break;
1436 case 1: *name = "function"; *name_p = "()"; break;
1437 default: *name = "(unknown reference)"; *name_p = ""; break;
1438 }
1439}
1440
1441/*
1442 * Print a warning about a section mismatch.
1443 * Try to find symbols near it so user can find it.
1444 * Check whitelist before warning - it may be a false positive.
1445 */
1446static void report_sec_mismatch(const char *modname,
1447 const struct sectioncheck *mismatch,
1448 const char *fromsec,
1449 unsigned long long fromaddr,
1450 const char *fromsym,
1451 int from_is_func,
1452 const char *tosec, const char *tosym,
1453 int to_is_func)
1454{
1455 const char *from, *from_p;
1456 const char *to, *to_p;
1457 char *prl_from;
1458 char *prl_to;
1459
1460 sec_mismatch_count++;
1461
1462 get_pretty_name(from_is_func, &from, &from_p);
1463 get_pretty_name(to_is_func, &to, &to_p);
1464
1465 warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s "
1466 "to the %s %s:%s%s\n",
1467 modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1468 tosym, to_p);
1469
1470 switch (mismatch->mismatch) {
1471 case TEXT_TO_ANY_INIT:
1472 prl_from = sec2annotation(fromsec);
1473 prl_to = sec2annotation(tosec);
1474 fprintf(stderr,
1475 "The function %s%s() references\n"
1476 "the %s %s%s%s.\n"
1477 "This is often because %s lacks a %s\n"
1478 "annotation or the annotation of %s is wrong.\n",
1479 prl_from, fromsym,
1480 to, prl_to, tosym, to_p,
1481 fromsym, prl_to, tosym);
1482 free(prl_from);
1483 free(prl_to);
1484 break;
1485 case DATA_TO_ANY_INIT: {
1486 prl_to = sec2annotation(tosec);
1487 fprintf(stderr,
1488 "The variable %s references\n"
1489 "the %s %s%s%s\n"
1490 "If the reference is valid then annotate the\n"
1491 "variable with __init* or __refdata (see linux/init.h) "
1492 "or name the variable:\n",
1493 fromsym, to, prl_to, tosym, to_p);
1494 print_section_list(mismatch->symbol_white_list);
1495 free(prl_to);
1496 break;
1497 }
1498 case TEXT_TO_ANY_EXIT:
1499 prl_to = sec2annotation(tosec);
1500 fprintf(stderr,
1501 "The function %s() references a %s in an exit section.\n"
1502 "Often the %s %s%s has valid usage outside the exit section\n"
1503 "and the fix is to remove the %sannotation of %s.\n",
1504 fromsym, to, to, tosym, to_p, prl_to, tosym);
1505 free(prl_to);
1506 break;
1507 case DATA_TO_ANY_EXIT: {
1508 prl_to = sec2annotation(tosec);
1509 fprintf(stderr,
1510 "The variable %s references\n"
1511 "the %s %s%s%s\n"
1512 "If the reference is valid then annotate the\n"
1513 "variable with __exit* (see linux/init.h) or "
1514 "name the variable:\n",
1515 fromsym, to, prl_to, tosym, to_p);
1516 print_section_list(mismatch->symbol_white_list);
1517 free(prl_to);
1518 break;
1519 }
1520 case XXXINIT_TO_SOME_INIT:
1521 case XXXEXIT_TO_SOME_EXIT:
1522 prl_from = sec2annotation(fromsec);
1523 prl_to = sec2annotation(tosec);
1524 fprintf(stderr,
1525 "The %s %s%s%s references\n"
1526 "a %s %s%s%s.\n"
1527 "If %s is only used by %s then\n"
1528 "annotate %s with a matching annotation.\n",
1529 from, prl_from, fromsym, from_p,
1530 to, prl_to, tosym, to_p,
1531 tosym, fromsym, tosym);
1532 free(prl_from);
1533 free(prl_to);
1534 break;
1535 case ANY_INIT_TO_ANY_EXIT:
1536 prl_from = sec2annotation(fromsec);
1537 prl_to = sec2annotation(tosec);
1538 fprintf(stderr,
1539 "The %s %s%s%s references\n"
1540 "a %s %s%s%s.\n"
1541 "This is often seen when error handling "
1542 "in the init function\n"
1543 "uses functionality in the exit path.\n"
1544 "The fix is often to remove the %sannotation of\n"
1545 "%s%s so it may be used outside an exit section.\n",
1546 from, prl_from, fromsym, from_p,
1547 to, prl_to, tosym, to_p,
1548 prl_to, tosym, to_p);
1549 free(prl_from);
1550 free(prl_to);
1551 break;
1552 case ANY_EXIT_TO_ANY_INIT:
1553 prl_from = sec2annotation(fromsec);
1554 prl_to = sec2annotation(tosec);
1555 fprintf(stderr,
1556 "The %s %s%s%s references\n"
1557 "a %s %s%s%s.\n"
1558 "This is often seen when error handling "
1559 "in the exit function\n"
1560 "uses functionality in the init path.\n"
1561 "The fix is often to remove the %sannotation of\n"
1562 "%s%s so it may be used outside an init section.\n",
1563 from, prl_from, fromsym, from_p,
1564 to, prl_to, tosym, to_p,
1565 prl_to, tosym, to_p);
1566 free(prl_from);
1567 free(prl_to);
1568 break;
1569 case EXPORT_TO_INIT_EXIT:
1570 prl_to = sec2annotation(tosec);
1571 fprintf(stderr,
1572 "The symbol %s is exported and annotated %s\n"
1573 "Fix this by removing the %sannotation of %s "
1574 "or drop the export.\n",
1575 tosym, prl_to, prl_to, tosym);
1576 free(prl_to);
1577 break;
1578 case EXTABLE_TO_NON_TEXT:
1579 fatal("There's a special handler for this mismatch type, "
1580 "we should never get here.");
1581 break;
1582 }
1583 fprintf(stderr, "\n");
1584}
1585
1586static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1587 const struct sectioncheck* const mismatch,
1588 Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1589{
1590 const char *tosec;
1591 Elf_Sym *to;
1592 Elf_Sym *from;
1593 const char *tosym;
1594 const char *fromsym;
1595
1596 from = find_elf_symbol2(elf, r->r_offset, fromsec);
1597 fromsym = sym_name(elf, from);
1598
1599 if (strstarts(fromsym, "reference___initcall"))
1600 return;
1601
1602 tosec = sec_name(elf, get_secindex(elf, sym));
1603 to = find_elf_symbol(elf, r->r_addend, sym);
1604 tosym = sym_name(elf, to);
1605
1606 /* check whitelist - we may ignore it */
1607 if (secref_whitelist(mismatch,
1608 fromsec, fromsym, tosec, tosym)) {
1609 report_sec_mismatch(modname, mismatch,
1610 fromsec, r->r_offset, fromsym,
1611 is_function(from), tosec, tosym,
1612 is_function(to));
1613 }
1614}
1615
1616static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1617{
1618 if (section_index > elf->num_sections)
1619 fatal("section_index is outside elf->num_sections!\n");
1620
1621 return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1622}
1623
1624/*
1625 * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1626 * to know the sizeof(struct exception_table_entry) for the target architecture.
1627 */
1628static unsigned int extable_entry_size = 0;
1629static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1630{
1631 /*
1632 * If we're currently checking the second relocation within __ex_table,
1633 * that relocation offset tells us the offsetof(struct
1634 * exception_table_entry, fixup) which is equal to sizeof(struct
1635 * exception_table_entry) divided by two. We use that to our advantage
1636 * since there's no portable way to get that size as every architecture
1637 * seems to go with different sized types. Not pretty but better than
1638 * hard-coding the size for every architecture..
1639 */
1640 if (!extable_entry_size)
1641 extable_entry_size = r->r_offset * 2;
1642}
1643
1644static inline bool is_extable_fault_address(Elf_Rela *r)
1645{
1646 /*
1647 * extable_entry_size is only discovered after we've handled the
1648 * _second_ relocation in __ex_table, so only abort when we're not
1649 * handling the first reloc and extable_entry_size is zero.
1650 */
1651 if (r->r_offset && extable_entry_size == 0)
1652 fatal("extable_entry size hasn't been discovered!\n");
1653
1654 return ((r->r_offset == 0) ||
1655 (r->r_offset % extable_entry_size == 0));
1656}
1657
1658#define is_second_extable_reloc(Start, Cur, Sec) \
1659 (((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1660
1661static void report_extable_warnings(const char* modname, struct elf_info* elf,
1662 const struct sectioncheck* const mismatch,
1663 Elf_Rela* r, Elf_Sym* sym,
1664 const char* fromsec, const char* tosec)
1665{
1666 Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1667 const char* fromsym_name = sym_name(elf, fromsym);
1668 Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1669 const char* tosym_name = sym_name(elf, tosym);
1670 const char* from_pretty_name;
1671 const char* from_pretty_name_p;
1672 const char* to_pretty_name;
1673 const char* to_pretty_name_p;
1674
1675 get_pretty_name(is_function(fromsym),
1676 &from_pretty_name, &from_pretty_name_p);
1677 get_pretty_name(is_function(tosym),
1678 &to_pretty_name, &to_pretty_name_p);
1679
1680 warn("%s(%s+0x%lx): Section mismatch in reference"
1681 " from the %s %s%s to the %s %s:%s%s\n",
1682 modname, fromsec, (long)r->r_offset, from_pretty_name,
1683 fromsym_name, from_pretty_name_p,
1684 to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1685
1686 if (!match(tosec, mismatch->bad_tosec) &&
1687 is_executable_section(elf, get_secindex(elf, sym)))
1688 fprintf(stderr,
1689 "The relocation at %s+0x%lx references\n"
1690 "section \"%s\" which is not in the list of\n"
1691 "authorized sections. If you're adding a new section\n"
1692 "and/or if this reference is valid, add \"%s\" to the\n"
1693 "list of authorized sections to jump to on fault.\n"
1694 "This can be achieved by adding \"%s\" to \n"
1695 "OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1696 fromsec, (long)r->r_offset, tosec, tosec, tosec);
1697}
1698
1699static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1700 const struct sectioncheck* const mismatch,
1701 Elf_Rela* r, Elf_Sym* sym,
1702 const char *fromsec)
1703{
1704 const char* tosec = sec_name(elf, get_secindex(elf, sym));
1705
1706 sec_mismatch_count++;
1707
1708 report_extable_warnings(modname, elf, mismatch, r, sym, fromsec, tosec);
1709
1710 if (match(tosec, mismatch->bad_tosec))
1711 fatal("The relocation at %s+0x%lx references\n"
1712 "section \"%s\" which is black-listed.\n"
1713 "Something is seriously wrong and should be fixed.\n"
1714 "You might get more information about where this is\n"
1715 "coming from by using scripts/check_extable.sh %s\n",
1716 fromsec, (long)r->r_offset, tosec, modname);
1717 else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1718 if (is_extable_fault_address(r))
1719 fatal("The relocation at %s+0x%lx references\n"
1720 "section \"%s\" which is not executable, IOW\n"
1721 "it is not possible for the kernel to fault\n"
1722 "at that address. Something is seriously wrong\n"
1723 "and should be fixed.\n",
1724 fromsec, (long)r->r_offset, tosec);
1725 else
1726 fatal("The relocation at %s+0x%lx references\n"
1727 "section \"%s\" which is not executable, IOW\n"
1728 "the kernel will fault if it ever tries to\n"
1729 "jump to it. Something is seriously wrong\n"
1730 "and should be fixed.\n",
1731 fromsec, (long)r->r_offset, tosec);
1732 }
1733}
1734
1735static void check_section_mismatch(const char *modname, struct elf_info *elf,
1736 Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1737{
1738 const char *tosec = sec_name(elf, get_secindex(elf, sym));
1739 const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1740
1741 if (mismatch) {
1742 if (mismatch->handler)
1743 mismatch->handler(modname, elf, mismatch,
1744 r, sym, fromsec);
1745 else
1746 default_mismatch_handler(modname, elf, mismatch,
1747 r, sym, fromsec);
1748 }
1749}
1750
1751static unsigned int *reloc_location(struct elf_info *elf,
1752 Elf_Shdr *sechdr, Elf_Rela *r)
1753{
1754 return sym_get_data_by_offset(elf, sechdr->sh_info, r->r_offset);
1755}
1756
1757static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1758{
1759 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1760 unsigned int *location = reloc_location(elf, sechdr, r);
1761
1762 switch (r_typ) {
1763 case R_386_32:
1764 r->r_addend = TO_NATIVE(*location);
1765 break;
1766 case R_386_PC32:
1767 r->r_addend = TO_NATIVE(*location) + 4;
1768 /* For CONFIG_RELOCATABLE=y */
1769 if (elf->hdr->e_type == ET_EXEC)
1770 r->r_addend += r->r_offset;
1771 break;
1772 }
1773 return 0;
1774}
1775
1776#ifndef R_ARM_CALL
1777#define R_ARM_CALL 28
1778#endif
1779#ifndef R_ARM_JUMP24
1780#define R_ARM_JUMP24 29
1781#endif
1782
1783#ifndef R_ARM_THM_CALL
1784#define R_ARM_THM_CALL 10
1785#endif
1786#ifndef R_ARM_THM_JUMP24
1787#define R_ARM_THM_JUMP24 30
1788#endif
1789#ifndef R_ARM_THM_JUMP19
1790#define R_ARM_THM_JUMP19 51
1791#endif
1792
1793static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1794{
1795 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1796
1797 switch (r_typ) {
1798 case R_ARM_ABS32:
1799 /* From ARM ABI: (S + A) | T */
1800 r->r_addend = (int)(long)
1801 (elf->symtab_start + ELF_R_SYM(r->r_info));
1802 break;
1803 case R_ARM_PC24:
1804 case R_ARM_CALL:
1805 case R_ARM_JUMP24:
1806 case R_ARM_THM_CALL:
1807 case R_ARM_THM_JUMP24:
1808 case R_ARM_THM_JUMP19:
1809 /* From ARM ABI: ((S + A) | T) - P */
1810 r->r_addend = (int)(long)(elf->hdr +
1811 sechdr->sh_offset +
1812 (r->r_offset - sechdr->sh_addr));
1813 break;
1814 default:
1815 return 1;
1816 }
1817 return 0;
1818}
1819
1820static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1821{
1822 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1823 unsigned int *location = reloc_location(elf, sechdr, r);
1824 unsigned int inst;
1825
1826 if (r_typ == R_MIPS_HI16)
1827 return 1; /* skip this */
1828 inst = TO_NATIVE(*location);
1829 switch (r_typ) {
1830 case R_MIPS_LO16:
1831 r->r_addend = inst & 0xffff;
1832 break;
1833 case R_MIPS_26:
1834 r->r_addend = (inst & 0x03ffffff) << 2;
1835 break;
1836 case R_MIPS_32:
1837 r->r_addend = inst;
1838 break;
1839 }
1840 return 0;
1841}
1842
1843static void section_rela(const char *modname, struct elf_info *elf,
1844 Elf_Shdr *sechdr)
1845{
1846 Elf_Sym *sym;
1847 Elf_Rela *rela;
1848 Elf_Rela r;
1849 unsigned int r_sym;
1850 const char *fromsec;
1851
1852 Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1853 Elf_Rela *stop = (void *)start + sechdr->sh_size;
1854
1855 fromsec = sech_name(elf, sechdr);
1856 fromsec += strlen(".rela");
1857 /* if from section (name) is know good then skip it */
1858 if (match(fromsec, section_white_list))
1859 return;
1860
1861 for (rela = start; rela < stop; rela++) {
1862 r.r_offset = TO_NATIVE(rela->r_offset);
1863#if KERNEL_ELFCLASS == ELFCLASS64
1864 if (elf->hdr->e_machine == EM_MIPS) {
1865 unsigned int r_typ;
1866 r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1867 r_sym = TO_NATIVE(r_sym);
1868 r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1869 r.r_info = ELF64_R_INFO(r_sym, r_typ);
1870 } else {
1871 r.r_info = TO_NATIVE(rela->r_info);
1872 r_sym = ELF_R_SYM(r.r_info);
1873 }
1874#else
1875 r.r_info = TO_NATIVE(rela->r_info);
1876 r_sym = ELF_R_SYM(r.r_info);
1877#endif
1878 r.r_addend = TO_NATIVE(rela->r_addend);
1879 sym = elf->symtab_start + r_sym;
1880 /* Skip special sections */
1881 if (is_shndx_special(sym->st_shndx))
1882 continue;
1883 if (is_second_extable_reloc(start, rela, fromsec))
1884 find_extable_entry_size(fromsec, &r);
1885 check_section_mismatch(modname, elf, &r, sym, fromsec);
1886 }
1887}
1888
1889static void section_rel(const char *modname, struct elf_info *elf,
1890 Elf_Shdr *sechdr)
1891{
1892 Elf_Sym *sym;
1893 Elf_Rel *rel;
1894 Elf_Rela r;
1895 unsigned int r_sym;
1896 const char *fromsec;
1897
1898 Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1899 Elf_Rel *stop = (void *)start + sechdr->sh_size;
1900
1901 fromsec = sech_name(elf, sechdr);
1902 fromsec += strlen(".rel");
1903 /* if from section (name) is know good then skip it */
1904 if (match(fromsec, section_white_list))
1905 return;
1906
1907 for (rel = start; rel < stop; rel++) {
1908 r.r_offset = TO_NATIVE(rel->r_offset);
1909#if KERNEL_ELFCLASS == ELFCLASS64
1910 if (elf->hdr->e_machine == EM_MIPS) {
1911 unsigned int r_typ;
1912 r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1913 r_sym = TO_NATIVE(r_sym);
1914 r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1915 r.r_info = ELF64_R_INFO(r_sym, r_typ);
1916 } else {
1917 r.r_info = TO_NATIVE(rel->r_info);
1918 r_sym = ELF_R_SYM(r.r_info);
1919 }
1920#else
1921 r.r_info = TO_NATIVE(rel->r_info);
1922 r_sym = ELF_R_SYM(r.r_info);
1923#endif
1924 r.r_addend = 0;
1925 switch (elf->hdr->e_machine) {
1926 case EM_386:
1927 if (addend_386_rel(elf, sechdr, &r))
1928 continue;
1929 break;
1930 case EM_ARM:
1931 if (addend_arm_rel(elf, sechdr, &r))
1932 continue;
1933 break;
1934 case EM_MIPS:
1935 if (addend_mips_rel(elf, sechdr, &r))
1936 continue;
1937 break;
1938 }
1939 sym = elf->symtab_start + r_sym;
1940 /* Skip special sections */
1941 if (is_shndx_special(sym->st_shndx))
1942 continue;
1943 if (is_second_extable_reloc(start, rel, fromsec))
1944 find_extable_entry_size(fromsec, &r);
1945 check_section_mismatch(modname, elf, &r, sym, fromsec);
1946 }
1947}
1948
1949/**
1950 * A module includes a number of sections that are discarded
1951 * either when loaded or when used as built-in.
1952 * For loaded modules all functions marked __init and all data
1953 * marked __initdata will be discarded when the module has been initialized.
1954 * Likewise for modules used built-in the sections marked __exit
1955 * are discarded because __exit marked function are supposed to be called
1956 * only when a module is unloaded which never happens for built-in modules.
1957 * The check_sec_ref() function traverses all relocation records
1958 * to find all references to a section that reference a section that will
1959 * be discarded and warns about it.
1960 **/
1961static void check_sec_ref(struct module *mod, const char *modname,
1962 struct elf_info *elf)
1963{
1964 int i;
1965 Elf_Shdr *sechdrs = elf->sechdrs;
1966
1967 /* Walk through all sections */
1968 for (i = 0; i < elf->num_sections; i++) {
1969 check_section(modname, elf, &elf->sechdrs[i]);
1970 /* We want to process only relocation sections and not .init */
1971 if (sechdrs[i].sh_type == SHT_RELA)
1972 section_rela(modname, elf, &elf->sechdrs[i]);
1973 else if (sechdrs[i].sh_type == SHT_REL)
1974 section_rel(modname, elf, &elf->sechdrs[i]);
1975 }
1976}
1977
1978static char *remove_dot(char *s)
1979{
1980 size_t n = strcspn(s, ".");
1981
1982 if (n && s[n]) {
1983 size_t m = strspn(s + n + 1, "0123456789");
1984 if (m && (s[n + m] == '.' || s[n + m] == 0))
1985 s[n] = 0;
1986 }
1987 return s;
1988}
1989
1990static void read_symbols(const char *modname)
1991{
1992 const char *symname;
1993 char *version;
1994 char *license;
1995 char *namespace;
1996 struct module *mod;
1997 struct elf_info info = { };
1998 Elf_Sym *sym;
1999
2000 if (!parse_elf(&info, modname))
2001 return;
2002
2003 {
2004 char *tmp;
2005
2006 /* strip trailing .o */
2007 tmp = NOFAIL(strdup(modname));
2008 tmp[strlen(tmp) - 2] = '\0';
2009 mod = new_module(tmp);
2010 free(tmp);
2011 }
2012
2013 if (!mod->is_vmlinux) {
2014 license = get_modinfo(&info, "license");
2015 if (!license)
2016 warn("missing MODULE_LICENSE() in %s\n", modname);
2017 while (license) {
2018 if (license_is_gpl_compatible(license))
2019 mod->gpl_compatible = 1;
2020 else {
2021 mod->gpl_compatible = 0;
2022 break;
2023 }
2024 license = get_next_modinfo(&info, "license", license);
2025 }
2026
2027 namespace = get_modinfo(&info, "import_ns");
2028 while (namespace) {
2029 add_namespace(&mod->imported_namespaces, namespace);
2030 namespace = get_next_modinfo(&info, "import_ns",
2031 namespace);
2032 }
2033 }
2034
2035 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2036 symname = remove_dot(info.strtab + sym->st_name);
2037
2038 handle_symbol(mod, &info, sym, symname);
2039 handle_moddevtable(mod, &info, sym, symname);
2040 }
2041
2042 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2043 symname = remove_dot(info.strtab + sym->st_name);
2044
2045 /* Apply symbol namespaces from __kstrtabns_<symbol> entries. */
2046 if (strstarts(symname, "__kstrtabns_"))
2047 sym_update_namespace(symname + strlen("__kstrtabns_"),
2048 namespace_from_kstrtabns(&info,
2049 sym));
2050
2051 if (strstarts(symname, "__crc_"))
2052 handle_modversion(mod, &info, sym,
2053 symname + strlen("__crc_"));
2054 }
2055
2056 // check for static EXPORT_SYMBOL_* functions && global vars
2057 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2058 unsigned char bind = ELF_ST_BIND(sym->st_info);
2059
2060 if (bind == STB_GLOBAL || bind == STB_WEAK) {
2061 struct symbol *s =
2062 find_symbol(remove_dot(info.strtab +
2063 sym->st_name));
2064
2065 if (s)
2066 s->is_static = 0;
2067 }
2068 }
2069
2070 check_sec_ref(mod, modname, &info);
2071
2072 if (!mod->is_vmlinux) {
2073 version = get_modinfo(&info, "version");
2074 if (version || all_versions)
2075 get_src_version(modname, mod->srcversion,
2076 sizeof(mod->srcversion) - 1);
2077 }
2078
2079 parse_elf_finish(&info);
2080
2081 /* Our trick to get versioning for module struct etc. - it's
2082 * never passed as an argument to an exported function, so
2083 * the automatic versioning doesn't pick it up, but it's really
2084 * important anyhow */
2085 if (modversions)
2086 mod->unres = alloc_symbol("module_layout", 0, mod->unres);
2087}
2088
2089static void read_symbols_from_files(const char *filename)
2090{
2091 FILE *in = stdin;
2092 char fname[PATH_MAX];
2093
2094 if (strcmp(filename, "-") != 0) {
2095 in = fopen(filename, "r");
2096 if (!in)
2097 fatal("Can't open filenames file %s: %m", filename);
2098 }
2099
2100 while (fgets(fname, PATH_MAX, in) != NULL) {
2101 if (strends(fname, "\n"))
2102 fname[strlen(fname)-1] = '\0';
2103 read_symbols(fname);
2104 }
2105
2106 if (in != stdin)
2107 fclose(in);
2108}
2109
2110#define SZ 500
2111
2112/* We first write the generated file into memory using the
2113 * following helper, then compare to the file on disk and
2114 * only update the later if anything changed */
2115
2116void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2117 const char *fmt, ...)
2118{
2119 char tmp[SZ];
2120 int len;
2121 va_list ap;
2122
2123 va_start(ap, fmt);
2124 len = vsnprintf(tmp, SZ, fmt, ap);
2125 buf_write(buf, tmp, len);
2126 va_end(ap);
2127}
2128
2129void buf_write(struct buffer *buf, const char *s, int len)
2130{
2131 if (buf->size - buf->pos < len) {
2132 buf->size += len + SZ;
2133 buf->p = NOFAIL(realloc(buf->p, buf->size));
2134 }
2135 strncpy(buf->p + buf->pos, s, len);
2136 buf->pos += len;
2137}
2138
2139static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2140{
2141 switch (exp) {
2142 case export_gpl:
2143 fatal("GPL-incompatible module %s.ko uses GPL-only symbol '%s'\n",
2144 m, s);
2145 break;
2146 case export_unused_gpl:
2147 fatal("GPL-incompatible module %s.ko uses GPL-only symbol marked UNUSED '%s'\n",
2148 m, s);
2149 break;
2150 case export_gpl_future:
2151 warn("GPL-incompatible module %s.ko uses future GPL-only symbol '%s'\n",
2152 m, s);
2153 break;
2154 case export_plain:
2155 case export_unused:
2156 case export_unknown:
2157 /* ignore */
2158 break;
2159 }
2160}
2161
2162static void check_for_unused(enum export exp, const char *m, const char *s)
2163{
2164 switch (exp) {
2165 case export_unused:
2166 case export_unused_gpl:
2167 warn("module %s.ko uses symbol '%s' marked UNUSED\n",
2168 m, s);
2169 break;
2170 default:
2171 /* ignore */
2172 break;
2173 }
2174}
2175
2176static int check_exports(struct module *mod)
2177{
2178 struct symbol *s, *exp;
2179 int err = 0;
2180
2181 for (s = mod->unres; s; s = s->next) {
2182 const char *basename;
2183 exp = find_symbol(s->name);
2184 if (!exp || exp->module == mod) {
2185 if (have_vmlinux && !s->weak) {
2186 modpost_log(warn_unresolved ? LOG_WARN : LOG_ERROR,
2187 "\"%s\" [%s.ko] undefined!\n",
2188 s->name, mod->name);
2189 if (!warn_unresolved)
2190 err = 1;
2191 }
2192 continue;
2193 }
2194 basename = strrchr(mod->name, '/');
2195 if (basename)
2196 basename++;
2197 else
2198 basename = mod->name;
2199
2200 if (exp->namespace &&
2201 !module_imports_namespace(mod, exp->namespace)) {
2202 modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
2203 "module %s uses symbol %s from namespace %s, but does not import it.\n",
2204 basename, exp->name, exp->namespace);
2205 if (!allow_missing_ns_imports)
2206 err = 1;
2207 add_namespace(&mod->missing_namespaces, exp->namespace);
2208 }
2209
2210 if (!mod->gpl_compatible)
2211 check_for_gpl_usage(exp->export, basename, exp->name);
2212 check_for_unused(exp->export, basename, exp->name);
2213 }
2214
2215 return err;
2216}
2217
2218static int check_modname_len(struct module *mod)
2219{
2220 const char *mod_name;
2221
2222 mod_name = strrchr(mod->name, '/');
2223 if (mod_name == NULL)
2224 mod_name = mod->name;
2225 else
2226 mod_name++;
2227 if (strlen(mod_name) >= MODULE_NAME_LEN) {
2228 merror("module name is too long [%s.ko]\n", mod->name);
2229 return 1;
2230 }
2231
2232 return 0;
2233}
2234
2235/**
2236 * Header for the generated file
2237 **/
2238static void add_header(struct buffer *b, struct module *mod)
2239{
2240 buf_printf(b, "#include <linux/module.h>\n");
2241 /*
2242 * Include build-salt.h after module.h in order to
2243 * inherit the definitions.
2244 */
2245 buf_printf(b, "#define INCLUDE_VERMAGIC\n");
2246 buf_printf(b, "#include <linux/build-salt.h>\n");
2247 buf_printf(b, "#include <linux/vermagic.h>\n");
2248 buf_printf(b, "#include <linux/compiler.h>\n");
2249 buf_printf(b, "\n");
2250 buf_printf(b, "BUILD_SALT;\n");
2251 buf_printf(b, "\n");
2252 buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2253 buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
2254 buf_printf(b, "\n");
2255 buf_printf(b, "__visible struct module __this_module\n");
2256 buf_printf(b, "__section(.gnu.linkonce.this_module) = {\n");
2257 buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2258 if (mod->has_init)
2259 buf_printf(b, "\t.init = init_module,\n");
2260 if (mod->has_cleanup)
2261 buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2262 "\t.exit = cleanup_module,\n"
2263 "#endif\n");
2264 buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2265 buf_printf(b, "};\n");
2266}
2267
2268static void add_intree_flag(struct buffer *b, int is_intree)
2269{
2270 if (is_intree)
2271 buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2272}
2273
2274/* Cannot check for assembler */
2275static void add_retpoline(struct buffer *b)
2276{
2277 buf_printf(b, "\n#ifdef CONFIG_RETPOLINE\n");
2278 buf_printf(b, "MODULE_INFO(retpoline, \"Y\");\n");
2279 buf_printf(b, "#endif\n");
2280}
2281
2282static void add_staging_flag(struct buffer *b, const char *name)
2283{
2284 if (strstarts(name, "drivers/staging"))
2285 buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2286}
2287
2288/**
2289 * Record CRCs for unresolved symbols
2290 **/
2291static int add_versions(struct buffer *b, struct module *mod)
2292{
2293 struct symbol *s, *exp;
2294 int err = 0;
2295
2296 for (s = mod->unres; s; s = s->next) {
2297 exp = find_symbol(s->name);
2298 if (!exp || exp->module == mod)
2299 continue;
2300 s->module = exp->module;
2301 s->crc_valid = exp->crc_valid;
2302 s->crc = exp->crc;
2303 }
2304
2305 if (!modversions)
2306 return err;
2307
2308 buf_printf(b, "\n");
2309 buf_printf(b, "static const struct modversion_info ____versions[]\n");
2310 buf_printf(b, "__used __section(__versions) = {\n");
2311
2312 for (s = mod->unres; s; s = s->next) {
2313 if (!s->module)
2314 continue;
2315 if (!s->crc_valid) {
2316 warn("\"%s\" [%s.ko] has no CRC!\n",
2317 s->name, mod->name);
2318 continue;
2319 }
2320 if (strlen(s->name) >= MODULE_NAME_LEN) {
2321 merror("too long symbol \"%s\" [%s.ko]\n",
2322 s->name, mod->name);
2323 err = 1;
2324 break;
2325 }
2326 buf_printf(b, "\t{ %#8x, \"%s\" },\n",
2327 s->crc, s->name);
2328 }
2329
2330 buf_printf(b, "};\n");
2331
2332 return err;
2333}
2334
2335static void add_depends(struct buffer *b, struct module *mod)
2336{
2337 struct symbol *s;
2338 int first = 1;
2339
2340 /* Clear ->seen flag of modules that own symbols needed by this. */
2341 for (s = mod->unres; s; s = s->next)
2342 if (s->module)
2343 s->module->seen = s->module->is_vmlinux;
2344
2345 buf_printf(b, "\n");
2346 buf_printf(b, "MODULE_INFO(depends, \"");
2347 for (s = mod->unres; s; s = s->next) {
2348 const char *p;
2349 if (!s->module)
2350 continue;
2351
2352 if (s->module->seen)
2353 continue;
2354
2355 s->module->seen = 1;
2356 p = strrchr(s->module->name, '/');
2357 if (p)
2358 p++;
2359 else
2360 p = s->module->name;
2361 buf_printf(b, "%s%s", first ? "" : ",", p);
2362 first = 0;
2363 }
2364 buf_printf(b, "\");\n");
2365}
2366
2367static void add_srcversion(struct buffer *b, struct module *mod)
2368{
2369 if (mod->srcversion[0]) {
2370 buf_printf(b, "\n");
2371 buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2372 mod->srcversion);
2373 }
2374}
2375
2376static void write_buf(struct buffer *b, const char *fname)
2377{
2378 FILE *file;
2379
2380 file = fopen(fname, "w");
2381 if (!file) {
2382 perror(fname);
2383 exit(1);
2384 }
2385 if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2386 perror(fname);
2387 exit(1);
2388 }
2389 if (fclose(file) != 0) {
2390 perror(fname);
2391 exit(1);
2392 }
2393}
2394
2395static void write_if_changed(struct buffer *b, const char *fname)
2396{
2397 char *tmp;
2398 FILE *file;
2399 struct stat st;
2400
2401 file = fopen(fname, "r");
2402 if (!file)
2403 goto write;
2404
2405 if (fstat(fileno(file), &st) < 0)
2406 goto close_write;
2407
2408 if (st.st_size != b->pos)
2409 goto close_write;
2410
2411 tmp = NOFAIL(malloc(b->pos));
2412 if (fread(tmp, 1, b->pos, file) != b->pos)
2413 goto free_write;
2414
2415 if (memcmp(tmp, b->p, b->pos) != 0)
2416 goto free_write;
2417
2418 free(tmp);
2419 fclose(file);
2420 return;
2421
2422 free_write:
2423 free(tmp);
2424 close_write:
2425 fclose(file);
2426 write:
2427 write_buf(b, fname);
2428}
2429
2430/* parse Module.symvers file. line format:
2431 * 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace
2432 **/
2433static void read_dump(const char *fname)
2434{
2435 char *buf, *pos, *line;
2436
2437 buf = read_text_file(fname);
2438 if (!buf)
2439 /* No symbol versions, silently ignore */
2440 return;
2441
2442 pos = buf;
2443
2444 while ((line = get_line(&pos))) {
2445 char *symname, *namespace, *modname, *d, *export;
2446 unsigned int crc;
2447 struct module *mod;
2448 struct symbol *s;
2449
2450 if (!(symname = strchr(line, '\t')))
2451 goto fail;
2452 *symname++ = '\0';
2453 if (!(modname = strchr(symname, '\t')))
2454 goto fail;
2455 *modname++ = '\0';
2456 if (!(export = strchr(modname, '\t')))
2457 goto fail;
2458 *export++ = '\0';
2459 if (!(namespace = strchr(export, '\t')))
2460 goto fail;
2461 *namespace++ = '\0';
2462
2463 crc = strtoul(line, &d, 16);
2464 if (*symname == '\0' || *modname == '\0' || *d != '\0')
2465 goto fail;
2466 mod = find_module(modname);
2467 if (!mod) {
2468 mod = new_module(modname);
2469 mod->from_dump = 1;
2470 }
2471 s = sym_add_exported(symname, mod, export_no(export));
2472 s->is_static = 0;
2473 sym_set_crc(symname, crc);
2474 sym_update_namespace(symname, namespace);
2475 }
2476 free(buf);
2477 return;
2478fail:
2479 free(buf);
2480 fatal("parse error in symbol dump file\n");
2481}
2482
2483/* For normal builds always dump all symbols.
2484 * For external modules only dump symbols
2485 * that are not read from kernel Module.symvers.
2486 **/
2487static int dump_sym(struct symbol *sym)
2488{
2489 if (!external_module)
2490 return 1;
2491 if (sym->module->from_dump)
2492 return 0;
2493 return 1;
2494}
2495
2496static void write_dump(const char *fname)
2497{
2498 struct buffer buf = { };
2499 struct symbol *symbol;
2500 const char *namespace;
2501 int n;
2502
2503 for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2504 symbol = symbolhash[n];
2505 while (symbol) {
2506 if (dump_sym(symbol)) {
2507 namespace = symbol->namespace;
2508 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n",
2509 symbol->crc, symbol->name,
2510 symbol->module->name,
2511 export_str(symbol->export),
2512 namespace ? namespace : "");
2513 }
2514 symbol = symbol->next;
2515 }
2516 }
2517 write_buf(&buf, fname);
2518 free(buf.p);
2519}
2520
2521static void write_namespace_deps_files(const char *fname)
2522{
2523 struct module *mod;
2524 struct namespace_list *ns;
2525 struct buffer ns_deps_buf = {};
2526
2527 for (mod = modules; mod; mod = mod->next) {
2528
2529 if (mod->from_dump || !mod->missing_namespaces)
2530 continue;
2531
2532 buf_printf(&ns_deps_buf, "%s.ko:", mod->name);
2533
2534 for (ns = mod->missing_namespaces; ns; ns = ns->next)
2535 buf_printf(&ns_deps_buf, " %s", ns->namespace);
2536
2537 buf_printf(&ns_deps_buf, "\n");
2538 }
2539
2540 write_if_changed(&ns_deps_buf, fname);
2541 free(ns_deps_buf.p);
2542}
2543
2544struct dump_list {
2545 struct dump_list *next;
2546 const char *file;
2547};
2548
2549int main(int argc, char **argv)
2550{
2551 struct module *mod;
2552 struct buffer buf = { };
2553 char *missing_namespace_deps = NULL;
2554 char *dump_write = NULL, *files_source = NULL;
2555 int opt;
2556 int err;
2557 int n;
2558 struct dump_list *dump_read_start = NULL;
2559 struct dump_list **dump_read_iter = &dump_read_start;
2560
2561 while ((opt = getopt(argc, argv, "ei:mnT:o:awENd:")) != -1) {
2562 switch (opt) {
2563 case 'e':
2564 external_module = 1;
2565 break;
2566 case 'i':
2567 *dump_read_iter =
2568 NOFAIL(calloc(1, sizeof(**dump_read_iter)));
2569 (*dump_read_iter)->file = optarg;
2570 dump_read_iter = &(*dump_read_iter)->next;
2571 break;
2572 case 'm':
2573 modversions = 1;
2574 break;
2575 case 'n':
2576 ignore_missing_files = 1;
2577 break;
2578 case 'o':
2579 dump_write = optarg;
2580 break;
2581 case 'a':
2582 all_versions = 1;
2583 break;
2584 case 'T':
2585 files_source = optarg;
2586 break;
2587 case 'w':
2588 warn_unresolved = 1;
2589 break;
2590 case 'E':
2591 sec_mismatch_fatal = 1;
2592 break;
2593 case 'N':
2594 allow_missing_ns_imports = 1;
2595 break;
2596 case 'd':
2597 missing_namespace_deps = optarg;
2598 break;
2599 default:
2600 exit(1);
2601 }
2602 }
2603
2604 while (dump_read_start) {
2605 struct dump_list *tmp;
2606
2607 read_dump(dump_read_start->file);
2608 tmp = dump_read_start->next;
2609 free(dump_read_start);
2610 dump_read_start = tmp;
2611 }
2612
2613 while (optind < argc)
2614 read_symbols(argv[optind++]);
2615
2616 if (files_source)
2617 read_symbols_from_files(files_source);
2618
2619 /*
2620 * When there's no vmlinux, don't print warnings about
2621 * unresolved symbols (since there'll be too many ;)
2622 */
2623 if (!have_vmlinux)
2624 warn("Symbol info of vmlinux is missing. Unresolved symbol check will be entirely skipped.\n");
2625
2626 err = 0;
2627
2628 for (mod = modules; mod; mod = mod->next) {
2629 char fname[PATH_MAX];
2630
2631 if (mod->is_vmlinux || mod->from_dump)
2632 continue;
2633
2634 buf.pos = 0;
2635
2636 err |= check_modname_len(mod);
2637 err |= check_exports(mod);
2638
2639 add_header(&buf, mod);
2640 add_intree_flag(&buf, !external_module);
2641 add_retpoline(&buf);
2642 add_staging_flag(&buf, mod->name);
2643 err |= add_versions(&buf, mod);
2644 add_depends(&buf, mod);
2645 add_moddevtable(&buf, mod);
2646 add_srcversion(&buf, mod);
2647
2648 sprintf(fname, "%s.mod.c", mod->name);
2649 write_if_changed(&buf, fname);
2650 }
2651
2652 if (missing_namespace_deps)
2653 write_namespace_deps_files(missing_namespace_deps);
2654
2655 if (dump_write)
2656 write_dump(dump_write);
2657 if (sec_mismatch_count && sec_mismatch_fatal)
2658 fatal("Section mismatches detected.\n"
2659 "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2660 for (n = 0; n < SYMBOL_HASH_SIZE; n++) {
2661 struct symbol *s;
2662
2663 for (s = symbolhash[n]; s; s = s->next) {
2664 if (s->is_static)
2665 warn("\"%s\" [%s] is a static %s\n",
2666 s->name, s->module->name,
2667 export_str(s->export));
2668 }
2669 }
2670
2671 free(buf.p);
2672
2673 return err;
2674}