1 /* Postprocess module symbol versions
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
8 * This software may be used and distributed according to the terms
9 * of the GNU General Public License, incorporated herein by reference.
11 * Usage: modpost vmlinux module1.o module2.o ...
24 #include "../../include/linux/license.h"
26 /* Are we using CONFIG_MODVERSIONS? */
27 static bool modversions;
28 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
29 static bool all_versions;
30 /* If we are modposting external module set to 1 */
31 static bool external_module;
32 /* Only warn about unresolved symbols */
33 static bool warn_unresolved;
35 static int sec_mismatch_count;
36 static bool sec_mismatch_warn_only = true;
37 /* ignore missing files */
38 static bool ignore_missing_files;
39 /* If set to 1, only warn (instead of error) about missing ns imports */
40 static bool allow_missing_ns_imports;
42 static bool error_occurred;
45 * Cut off the warnings when there are too many. This typically occurs when
46 * vmlinux is missing. ('make modules' without building vmlinux.)
48 #define MAX_UNRESOLVED_REPORTS 10
49 static unsigned int nr_unresolved;
51 /* In kernel, this size is defined in linux/module.h;
52 * here we use Elf_Addr instead of long for covering cross-compile
55 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
57 void __attribute__((format(printf, 2, 3)))
58 modpost_log(enum loglevel loglevel, const char *fmt, ...)
64 fprintf(stderr, "WARNING: ");
67 fprintf(stderr, "ERROR: ");
70 fprintf(stderr, "FATAL: ");
72 default: /* invalid loglevel, ignore */
76 fprintf(stderr, "modpost: ");
78 va_start(arglist, fmt);
79 vfprintf(stderr, fmt, arglist);
82 if (loglevel == LOG_FATAL)
84 if (loglevel == LOG_ERROR)
85 error_occurred = true;
88 static inline bool strends(const char *str, const char *postfix)
90 if (strlen(str) < strlen(postfix))
93 return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
96 void *do_nofail(void *ptr, const char *expr)
99 fatal("Memory allocation failure: %s.\n", expr);
104 char *read_text_file(const char *filename)
111 fd = open(filename, O_RDONLY);
117 if (fstat(fd, &st) < 0) {
122 buf = NOFAIL(malloc(st.st_size + 1));
129 bytes_read = read(fd, buf, nbytes);
130 if (bytes_read < 0) {
135 nbytes -= bytes_read;
137 buf[st.st_size] = '\0';
144 char *get_line(char **stringp)
146 char *orig = *stringp, *next;
148 /* do not return the unwanted extra line at EOF */
149 if (!orig || *orig == '\0')
152 /* don't use strsep here, it is not available everywhere */
153 next = strchr(orig, '\n');
162 /* A list of all modules we processed */
165 static struct module *find_module(const char *modname)
169 list_for_each_entry(mod, &modules, list) {
170 if (strcmp(mod->name, modname) == 0)
176 static struct module *new_module(const char *name, size_t namelen)
180 mod = NOFAIL(malloc(sizeof(*mod) + namelen + 1));
181 memset(mod, 0, sizeof(*mod));
183 INIT_LIST_HEAD(&mod->exported_symbols);
184 INIT_LIST_HEAD(&mod->unresolved_symbols);
185 INIT_LIST_HEAD(&mod->missing_namespaces);
186 INIT_LIST_HEAD(&mod->imported_namespaces);
188 memcpy(mod->name, name, namelen);
189 mod->name[namelen] = '\0';
190 mod->is_vmlinux = (strcmp(mod->name, "vmlinux") == 0);
193 * Set mod->is_gpl_compatible to true by default. If MODULE_LICENSE()
194 * is missing, do not check the use for EXPORT_SYMBOL_GPL() becasue
195 * modpost will exit wiht error anyway.
197 mod->is_gpl_compatible = true;
199 list_add_tail(&mod->list, &modules);
204 /* A hash of all exported symbols,
205 * struct symbol is also used for lists of unresolved symbols */
207 #define SYMBOL_HASH_SIZE 1024
211 struct list_head list; /* link to module::exported_symbols or module::unresolved_symbols */
212 struct module *module;
217 bool is_gpl_only; /* exported by EXPORT_SYMBOL_GPL */
221 static struct symbol *symbolhash[SYMBOL_HASH_SIZE];
223 /* This is based on the hash algorithm from gdbm, via tdb */
224 static inline unsigned int tdb_hash(const char *name)
226 unsigned value; /* Used to compute the hash value. */
227 unsigned i; /* Used to cycle through random values. */
229 /* Set the initial value from the key size. */
230 for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++)
231 value = (value + (((unsigned char *)name)[i] << (i*5 % 24)));
233 return (1103515243 * value + 12345);
237 * Allocate a new symbols for use in the hash of exported symbols or
238 * the list of unresolved symbols per module
240 static struct symbol *alloc_symbol(const char *name)
242 struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
244 memset(s, 0, sizeof(*s));
245 strcpy(s->name, name);
250 /* For the hash of exported symbols */
251 static void hash_add_symbol(struct symbol *sym)
255 hash = tdb_hash(sym->name) % SYMBOL_HASH_SIZE;
256 sym->next = symbolhash[hash];
257 symbolhash[hash] = sym;
260 static void sym_add_unresolved(const char *name, struct module *mod, bool weak)
264 sym = alloc_symbol(name);
267 list_add_tail(&sym->list, &mod->unresolved_symbols);
270 static struct symbol *sym_find_with_module(const char *name, struct module *mod)
274 /* For our purposes, .foo matches foo. PPC64 needs this. */
278 for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
279 if (strcmp(s->name, name) == 0 && (!mod || s->module == mod))
285 static struct symbol *find_symbol(const char *name)
287 return sym_find_with_module(name, NULL);
290 struct namespace_list {
291 struct list_head list;
295 static bool contains_namespace(struct list_head *head, const char *namespace)
297 struct namespace_list *list;
299 list_for_each_entry(list, head, list) {
300 if (!strcmp(list->namespace, namespace))
307 static void add_namespace(struct list_head *head, const char *namespace)
309 struct namespace_list *ns_entry;
311 if (!contains_namespace(head, namespace)) {
312 ns_entry = NOFAIL(malloc(sizeof(*ns_entry) +
313 strlen(namespace) + 1));
314 strcpy(ns_entry->namespace, namespace);
315 list_add_tail(&ns_entry->list, head);
319 static void *sym_get_data_by_offset(const struct elf_info *info,
320 unsigned int secindex, unsigned long offset)
322 Elf_Shdr *sechdr = &info->sechdrs[secindex];
324 return (void *)info->hdr + sechdr->sh_offset + offset;
327 void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)
329 return sym_get_data_by_offset(info, get_secindex(info, sym),
333 static const char *sech_name(const struct elf_info *info, Elf_Shdr *sechdr)
335 return sym_get_data_by_offset(info, info->secindex_strings,
339 static const char *sec_name(const struct elf_info *info, unsigned int secindex)
342 * If sym->st_shndx is a special section index, there is no
343 * corresponding section header.
344 * Return "" if the index is out of range of info->sechdrs[] array.
346 if (secindex >= info->num_sections)
349 return sech_name(info, &info->sechdrs[secindex]);
352 #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
354 static void sym_update_namespace(const char *symname, const char *namespace)
356 struct symbol *s = find_symbol(symname);
359 * That symbol should have been created earlier and thus this is
360 * actually an assertion.
363 error("Could not update namespace(%s) for symbol %s\n",
369 s->namespace = namespace[0] ? NOFAIL(strdup(namespace)) : NULL;
372 static struct symbol *sym_add_exported(const char *name, struct module *mod,
375 struct symbol *s = find_symbol(name);
377 if (s && (!external_module || s->module->is_vmlinux || s->module == mod)) {
378 error("%s: '%s' exported twice. Previous export was in %s%s\n",
379 mod->name, name, s->module->name,
380 s->module->is_vmlinux ? "" : ".ko");
383 s = alloc_symbol(name);
385 s->is_gpl_only = gpl_only;
386 list_add_tail(&s->list, &mod->exported_symbols);
392 static void sym_set_crc(struct symbol *sym, unsigned int crc)
395 sym->crc_valid = true;
398 static void *grab_file(const char *filename, size_t *size)
401 void *map = MAP_FAILED;
404 fd = open(filename, O_RDONLY);
411 map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
415 if (map == MAP_FAILED)
420 static void release_file(void *file, size_t size)
425 static int parse_elf(struct elf_info *info, const char *filename)
431 const char *secstrings;
432 unsigned int symtab_idx = ~0U, symtab_shndx_idx = ~0U;
434 hdr = grab_file(filename, &info->size);
436 if (ignore_missing_files) {
437 fprintf(stderr, "%s: %s (ignored)\n", filename,
445 if (info->size < sizeof(*hdr)) {
446 /* file too small, assume this is an empty .o file */
449 /* Is this a valid ELF file? */
450 if ((hdr->e_ident[EI_MAG0] != ELFMAG0) ||
451 (hdr->e_ident[EI_MAG1] != ELFMAG1) ||
452 (hdr->e_ident[EI_MAG2] != ELFMAG2) ||
453 (hdr->e_ident[EI_MAG3] != ELFMAG3)) {
454 /* Not an ELF file - silently ignore it */
457 /* Fix endianness in ELF header */
458 hdr->e_type = TO_NATIVE(hdr->e_type);
459 hdr->e_machine = TO_NATIVE(hdr->e_machine);
460 hdr->e_version = TO_NATIVE(hdr->e_version);
461 hdr->e_entry = TO_NATIVE(hdr->e_entry);
462 hdr->e_phoff = TO_NATIVE(hdr->e_phoff);
463 hdr->e_shoff = TO_NATIVE(hdr->e_shoff);
464 hdr->e_flags = TO_NATIVE(hdr->e_flags);
465 hdr->e_ehsize = TO_NATIVE(hdr->e_ehsize);
466 hdr->e_phentsize = TO_NATIVE(hdr->e_phentsize);
467 hdr->e_phnum = TO_NATIVE(hdr->e_phnum);
468 hdr->e_shentsize = TO_NATIVE(hdr->e_shentsize);
469 hdr->e_shnum = TO_NATIVE(hdr->e_shnum);
470 hdr->e_shstrndx = TO_NATIVE(hdr->e_shstrndx);
471 sechdrs = (void *)hdr + hdr->e_shoff;
472 info->sechdrs = sechdrs;
474 /* modpost only works for relocatable objects */
475 if (hdr->e_type != ET_REL)
476 fatal("%s: not relocatable object.", filename);
478 /* Check if file offset is correct */
479 if (hdr->e_shoff > info->size) {
480 fatal("section header offset=%lu in file '%s' is bigger than filesize=%zu\n",
481 (unsigned long)hdr->e_shoff, filename, info->size);
485 if (hdr->e_shnum == SHN_UNDEF) {
487 * There are more than 64k sections,
488 * read count from .sh_size.
490 info->num_sections = TO_NATIVE(sechdrs[0].sh_size);
493 info->num_sections = hdr->e_shnum;
495 if (hdr->e_shstrndx == SHN_XINDEX) {
496 info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link);
499 info->secindex_strings = hdr->e_shstrndx;
502 /* Fix endianness in section headers */
503 for (i = 0; i < info->num_sections; i++) {
504 sechdrs[i].sh_name = TO_NATIVE(sechdrs[i].sh_name);
505 sechdrs[i].sh_type = TO_NATIVE(sechdrs[i].sh_type);
506 sechdrs[i].sh_flags = TO_NATIVE(sechdrs[i].sh_flags);
507 sechdrs[i].sh_addr = TO_NATIVE(sechdrs[i].sh_addr);
508 sechdrs[i].sh_offset = TO_NATIVE(sechdrs[i].sh_offset);
509 sechdrs[i].sh_size = TO_NATIVE(sechdrs[i].sh_size);
510 sechdrs[i].sh_link = TO_NATIVE(sechdrs[i].sh_link);
511 sechdrs[i].sh_info = TO_NATIVE(sechdrs[i].sh_info);
512 sechdrs[i].sh_addralign = TO_NATIVE(sechdrs[i].sh_addralign);
513 sechdrs[i].sh_entsize = TO_NATIVE(sechdrs[i].sh_entsize);
515 /* Find symbol table. */
516 secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset;
517 for (i = 1; i < info->num_sections; i++) {
519 int nobits = sechdrs[i].sh_type == SHT_NOBITS;
521 if (!nobits && sechdrs[i].sh_offset > info->size) {
522 fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
523 "sizeof(*hrd)=%zu\n", filename,
524 (unsigned long)sechdrs[i].sh_offset,
528 secname = secstrings + sechdrs[i].sh_name;
529 if (strcmp(secname, ".modinfo") == 0) {
531 fatal("%s has NOBITS .modinfo\n", filename);
532 info->modinfo = (void *)hdr + sechdrs[i].sh_offset;
533 info->modinfo_len = sechdrs[i].sh_size;
536 if (sechdrs[i].sh_type == SHT_SYMTAB) {
537 unsigned int sh_link_idx;
539 info->symtab_start = (void *)hdr +
540 sechdrs[i].sh_offset;
541 info->symtab_stop = (void *)hdr +
542 sechdrs[i].sh_offset + sechdrs[i].sh_size;
543 sh_link_idx = sechdrs[i].sh_link;
544 info->strtab = (void *)hdr +
545 sechdrs[sh_link_idx].sh_offset;
548 /* 32bit section no. table? ("more than 64k sections") */
549 if (sechdrs[i].sh_type == SHT_SYMTAB_SHNDX) {
550 symtab_shndx_idx = i;
551 info->symtab_shndx_start = (void *)hdr +
552 sechdrs[i].sh_offset;
553 info->symtab_shndx_stop = (void *)hdr +
554 sechdrs[i].sh_offset + sechdrs[i].sh_size;
557 if (!info->symtab_start)
558 fatal("%s has no symtab?\n", filename);
560 /* Fix endianness in symbols */
561 for (sym = info->symtab_start; sym < info->symtab_stop; sym++) {
562 sym->st_shndx = TO_NATIVE(sym->st_shndx);
563 sym->st_name = TO_NATIVE(sym->st_name);
564 sym->st_value = TO_NATIVE(sym->st_value);
565 sym->st_size = TO_NATIVE(sym->st_size);
568 if (symtab_shndx_idx != ~0U) {
570 if (symtab_idx != sechdrs[symtab_shndx_idx].sh_link)
571 fatal("%s: SYMTAB_SHNDX has bad sh_link: %u!=%u\n",
572 filename, sechdrs[symtab_shndx_idx].sh_link,
575 for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop;
583 static void parse_elf_finish(struct elf_info *info)
585 release_file(info->hdr, info->size);
588 static int ignore_undef_symbol(struct elf_info *info, const char *symname)
590 /* ignore __this_module, it will be resolved shortly */
591 if (strcmp(symname, "__this_module") == 0)
593 /* ignore global offset table */
594 if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0)
596 if (info->hdr->e_machine == EM_PPC)
597 /* Special register function linked on all modules during final link of .ko */
598 if (strstarts(symname, "_restgpr_") ||
599 strstarts(symname, "_savegpr_") ||
600 strstarts(symname, "_rest32gpr_") ||
601 strstarts(symname, "_save32gpr_") ||
602 strstarts(symname, "_restvr_") ||
603 strstarts(symname, "_savevr_"))
605 if (info->hdr->e_machine == EM_PPC64)
606 /* Special register function linked on all modules during final link of .ko */
607 if (strstarts(symname, "_restgpr0_") ||
608 strstarts(symname, "_savegpr0_") ||
609 strstarts(symname, "_restvr_") ||
610 strstarts(symname, "_savevr_") ||
611 strcmp(symname, ".TOC.") == 0)
614 if (info->hdr->e_machine == EM_S390)
615 /* Expoline thunks are linked on all kernel modules during final link of .ko */
616 if (strstarts(symname, "__s390_indirect_jump_r"))
618 /* Do not ignore this symbol */
622 static void handle_symbol(struct module *mod, struct elf_info *info,
623 const Elf_Sym *sym, const char *symname)
625 switch (sym->st_shndx) {
627 if (strstarts(symname, "__gnu_lto_")) {
628 /* Should warn here, but modpost runs before the linker */
630 warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
633 /* undefined symbol */
634 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
635 ELF_ST_BIND(sym->st_info) != STB_WEAK)
637 if (ignore_undef_symbol(info, symname))
639 if (info->hdr->e_machine == EM_SPARC ||
640 info->hdr->e_machine == EM_SPARCV9) {
641 /* Ignore register directives. */
642 if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
644 if (symname[0] == '.') {
645 char *munged = NOFAIL(strdup(symname));
647 munged[1] = toupper(munged[1]);
652 sym_add_unresolved(symname, mod,
653 ELF_ST_BIND(sym->st_info) == STB_WEAK);
656 /* All exported symbols */
657 if (strstarts(symname, "__ksymtab_")) {
658 const char *name, *secname;
660 name = symname + strlen("__ksymtab_");
661 secname = sec_name(info, get_secindex(info, sym));
663 if (strstarts(secname, "___ksymtab_gpl+"))
664 sym_add_exported(name, mod, true);
665 else if (strstarts(secname, "___ksymtab+"))
666 sym_add_exported(name, mod, false);
668 if (strcmp(symname, "init_module") == 0)
669 mod->has_init = true;
670 if (strcmp(symname, "cleanup_module") == 0)
671 mod->has_cleanup = true;
677 * Parse tag=value strings from .modinfo section
679 static char *next_string(char *string, unsigned long *secsize)
681 /* Skip non-zero chars */
684 if ((*secsize)-- <= 1)
688 /* Skip any zero padding. */
691 if ((*secsize)-- <= 1)
697 static char *get_next_modinfo(struct elf_info *info, const char *tag,
701 unsigned int taglen = strlen(tag);
702 char *modinfo = info->modinfo;
703 unsigned long size = info->modinfo_len;
706 size -= prev - modinfo;
707 modinfo = next_string(prev, &size);
710 for (p = modinfo; p; p = next_string(p, &size)) {
711 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
712 return p + taglen + 1;
717 static char *get_modinfo(struct elf_info *info, const char *tag)
720 return get_next_modinfo(info, tag, NULL);
723 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
726 return elf->strtab + sym->st_name;
732 * Check whether the 'string' argument matches one of the 'patterns',
733 * an array of shell wildcard patterns (glob).
735 * Return true is there is a match.
737 static bool match(const char *string, const char *const patterns[])
741 while ((pattern = *patterns++)) {
742 if (!fnmatch(pattern, string, 0))
749 /* useful to pass patterns to match() directly */
750 #define PATTERNS(...) \
752 static const char *const patterns[] = {__VA_ARGS__, NULL}; \
756 /* sections that we do not want to do full section mismatch check on */
757 static const char *const section_white_list[] =
761 ".zdebug*", /* Compressed debug sections. */
762 ".GCC.command.line", /* record-gcc-switches */
763 ".mdebug*", /* alpha, score, mips etc. */
764 ".pdr", /* alpha, score, mips etc. */
769 ".xt.prop", /* xtensa */
770 ".xt.lit", /* xtensa */
771 ".arcextmap*", /* arc */
772 ".gnu.linkonce.arcext*", /* arc : modules */
773 ".cmem*", /* EZchip */
774 ".fmt_slot*", /* EZchip */
781 * This is used to find sections missing the SHF_ALLOC flag.
782 * The cause of this is often a section specified in assembler
783 * without "ax" / "aw".
785 static void check_section(const char *modname, struct elf_info *elf,
788 const char *sec = sech_name(elf, sechdr);
790 if (sechdr->sh_type == SHT_PROGBITS &&
791 !(sechdr->sh_flags & SHF_ALLOC) &&
792 !match(sec, section_white_list)) {
793 warn("%s (%s): unexpected non-allocatable section.\n"
794 "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
795 "Note that for example <linux/init.h> contains\n"
796 "section definitions for use in .S files.\n\n",
803 #define ALL_INIT_DATA_SECTIONS \
804 ".init.setup", ".init.rodata", ".meminit.rodata", \
805 ".init.data", ".meminit.data"
806 #define ALL_EXIT_DATA_SECTIONS \
807 ".exit.data", ".memexit.data"
809 #define ALL_INIT_TEXT_SECTIONS \
810 ".init.text", ".meminit.text"
811 #define ALL_EXIT_TEXT_SECTIONS \
812 ".exit.text", ".memexit.text"
814 #define ALL_PCI_INIT_SECTIONS \
815 ".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
816 ".pci_fixup_enable", ".pci_fixup_resume", \
817 ".pci_fixup_resume_early", ".pci_fixup_suspend"
819 #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
820 #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
822 #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
823 #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
825 #define DATA_SECTIONS ".data", ".data.rel"
826 #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
827 ".kprobes.text", ".cpuidle.text", ".noinstr.text"
828 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
829 ".fixup", ".entry.text", ".exception.text", ".text.*", \
830 ".coldtext", ".softirqentry.text"
832 #define INIT_SECTIONS ".init.*"
833 #define MEM_INIT_SECTIONS ".meminit.*"
835 #define EXIT_SECTIONS ".exit.*"
836 #define MEM_EXIT_SECTIONS ".memexit.*"
838 #define ALL_TEXT_SECTIONS ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
839 TEXT_SECTIONS, OTHER_TEXT_SECTIONS
841 /* init data sections */
842 static const char *const init_data_sections[] =
843 { ALL_INIT_DATA_SECTIONS, NULL };
845 /* all init sections */
846 static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
848 /* all text sections */
849 static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
852 static const char *const data_sections[] = { DATA_SECTIONS, NULL };
854 static const char *const head_sections[] = { ".head.text*", NULL };
855 static const char *const linker_symbols[] =
856 { "__init_begin", "_sinittext", "_einittext", NULL };
857 static const char *const optim_symbols[] = { "*.constprop.*", NULL };
864 XXXINIT_TO_SOME_INIT,
865 XXXEXIT_TO_SOME_EXIT,
866 ANY_INIT_TO_ANY_EXIT,
867 ANY_EXIT_TO_ANY_INIT,
873 * Describe how to match sections on different criteria:
875 * @fromsec: Array of sections to be matched.
877 * @bad_tosec: Relocations applied to a section in @fromsec to a section in
878 * this array is forbidden (black-list). Can be empty.
880 * @good_tosec: Relocations applied to a section in @fromsec must be
881 * targeting sections in this array (white-list). Can be empty.
883 * @mismatch: Type of mismatch.
885 * @handler: Specific handler to call when a match is found. If NULL,
886 * default_mismatch_handler() will be called.
889 struct sectioncheck {
890 const char *fromsec[20];
891 const char *bad_tosec[20];
892 const char *good_tosec[20];
893 enum mismatch mismatch;
894 void (*handler)(const char *modname, struct elf_info *elf,
895 const struct sectioncheck* const mismatch,
896 Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
900 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
901 const struct sectioncheck* const mismatch,
902 Elf_Rela *r, Elf_Sym *sym,
903 const char *fromsec);
905 static const struct sectioncheck sectioncheck[] = {
906 /* Do not reference init/exit code/data from
907 * normal code and data
910 .fromsec = { TEXT_SECTIONS, NULL },
911 .bad_tosec = { ALL_INIT_SECTIONS, NULL },
912 .mismatch = TEXT_TO_ANY_INIT,
915 .fromsec = { DATA_SECTIONS, NULL },
916 .bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
917 .mismatch = DATA_TO_ANY_INIT,
920 .fromsec = { DATA_SECTIONS, NULL },
921 .bad_tosec = { INIT_SECTIONS, NULL },
922 .mismatch = DATA_TO_ANY_INIT,
925 .fromsec = { TEXT_SECTIONS, NULL },
926 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
927 .mismatch = TEXT_TO_ANY_EXIT,
930 .fromsec = { DATA_SECTIONS, NULL },
931 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
932 .mismatch = DATA_TO_ANY_EXIT,
934 /* Do not reference init code/data from meminit code/data */
936 .fromsec = { ALL_XXXINIT_SECTIONS, NULL },
937 .bad_tosec = { INIT_SECTIONS, NULL },
938 .mismatch = XXXINIT_TO_SOME_INIT,
940 /* Do not reference exit code/data from memexit code/data */
942 .fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
943 .bad_tosec = { EXIT_SECTIONS, NULL },
944 .mismatch = XXXEXIT_TO_SOME_EXIT,
946 /* Do not use exit code/data from init code */
948 .fromsec = { ALL_INIT_SECTIONS, NULL },
949 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
950 .mismatch = ANY_INIT_TO_ANY_EXIT,
952 /* Do not use init code/data from exit code */
954 .fromsec = { ALL_EXIT_SECTIONS, NULL },
955 .bad_tosec = { ALL_INIT_SECTIONS, NULL },
956 .mismatch = ANY_EXIT_TO_ANY_INIT,
959 .fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
960 .bad_tosec = { INIT_SECTIONS, NULL },
961 .mismatch = ANY_INIT_TO_ANY_EXIT,
963 /* Do not export init/exit functions or data */
965 .fromsec = { "___ksymtab*", NULL },
966 .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
967 .mismatch = EXPORT_TO_INIT_EXIT,
970 .fromsec = { "__ex_table", NULL },
971 /* If you're adding any new black-listed sections in here, consider
972 * adding a special 'printer' for them in scripts/check_extable.
974 .bad_tosec = { ".altinstr_replacement", NULL },
975 .good_tosec = {ALL_TEXT_SECTIONS , NULL},
976 .mismatch = EXTABLE_TO_NON_TEXT,
977 .handler = extable_mismatch_handler,
981 static const struct sectioncheck *section_mismatch(
982 const char *fromsec, const char *tosec)
987 * The target section could be the SHT_NUL section when we're
988 * handling relocations to un-resolved symbols, trying to match it
989 * doesn't make much sense and causes build failures on parisc
995 for (i = 0; i < ARRAY_SIZE(sectioncheck); i++) {
996 const struct sectioncheck *check = §ioncheck[i];
998 if (match(fromsec, check->fromsec)) {
999 if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1001 if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1009 * Whitelist to allow certain references to pass with no warning.
1012 * If a module parameter is declared __initdata and permissions=0
1013 * then this is legal despite the warning generated.
1014 * We cannot see value of permissions here, so just ignore
1016 * The pattern is identified by:
1017 * tosec = .init.data
1022 * module_param_call() ops can refer to __init set function if permissions=0
1023 * The pattern is identified by:
1024 * tosec = .init.text
1026 * atsym = __param_ops_*
1029 * Whitelist all references from .head.text to any init section
1032 * Some symbols belong to init section but still it is ok to reference
1033 * these from non-init sections as these symbols don't have any memory
1034 * allocated for them and symbol address and value are same. So even
1035 * if init section is freed, its ok to reference those symbols.
1036 * For ex. symbols marking the init section boundaries.
1037 * This pattern is identified by
1038 * refsymname = __init_begin, _sinittext, _einittext
1041 * GCC may optimize static inlines when fed constant arg(s) resulting
1042 * in functions like cpumask_empty() -- generating an associated symbol
1043 * cpumask_empty.constprop.3 that appears in the audit. If the const that
1044 * is passed in comes from __init, like say nmi_ipi_mask, we get a
1045 * meaningless section warning. May need to add isra symbols too...
1046 * This pattern is identified by
1047 * tosec = init section
1048 * fromsec = text section
1049 * refsymname = *.constprop.*
1052 * Hide section mismatch warnings for ELF local symbols. The goal
1053 * is to eliminate false positive modpost warnings caused by
1054 * compiler-generated ELF local symbol names such as ".LANCHOR1".
1055 * Autogenerated symbol names bypass modpost's "Pattern 2"
1056 * whitelisting, which relies on pattern-matching against symbol
1057 * names to work. (One situation where gcc can autogenerate ELF
1058 * local symbols is when "-fsection-anchors" is used.)
1060 static int secref_whitelist(const struct sectioncheck *mismatch,
1061 const char *fromsec, const char *fromsym,
1062 const char *tosec, const char *tosym)
1064 /* Check for pattern 1 */
1065 if (match(tosec, init_data_sections) &&
1066 match(fromsec, data_sections) &&
1067 strstarts(fromsym, "__param"))
1070 /* Check for pattern 1a */
1071 if (strcmp(tosec, ".init.text") == 0 &&
1072 match(fromsec, data_sections) &&
1073 strstarts(fromsym, "__param_ops_"))
1076 /* symbols in data sections that may refer to any init/exit sections */
1077 if (match(fromsec, PATTERNS(DATA_SECTIONS)) &&
1078 match(tosec, PATTERNS(ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS)) &&
1079 match(fromsym, PATTERNS("*_template", // scsi uses *_template a lot
1080 "*_timer", // arm uses ops structures named _timer a lot
1081 "*_sht", // scsi also used *_sht to some extent
1088 /* symbols in data sections that may refer to meminit/exit sections */
1089 if (match(fromsec, PATTERNS(DATA_SECTIONS)) &&
1090 match(tosec, PATTERNS(ALL_XXXINIT_SECTIONS, ALL_EXIT_SECTIONS)) &&
1091 match(fromsym, PATTERNS("*driver")))
1094 /* Check for pattern 3 */
1095 if (match(fromsec, head_sections) &&
1096 match(tosec, init_sections))
1099 /* Check for pattern 4 */
1100 if (match(tosym, linker_symbols))
1103 /* Check for pattern 5 */
1104 if (match(fromsec, text_sections) &&
1105 match(tosec, init_sections) &&
1106 match(fromsym, optim_symbols))
1109 /* Check for pattern 6 */
1110 if (strstarts(fromsym, ".L"))
1116 static inline int is_arm_mapping_symbol(const char *str)
1118 return str[0] == '$' &&
1119 (str[1] == 'a' || str[1] == 'd' || str[1] == 't' || str[1] == 'x')
1120 && (str[2] == '\0' || str[2] == '.');
1124 * If there's no name there, ignore it; likewise, ignore it if it's
1125 * one of the magic symbols emitted used by current ARM tools.
1127 * Otherwise if find_symbols_between() returns those symbols, they'll
1128 * fail the whitelist tests and cause lots of false alarms ... fixable
1129 * only by merging __exit and __init sections into __text, bloating
1130 * the kernel (which is especially evil on embedded platforms).
1132 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1134 const char *name = elf->strtab + sym->st_name;
1136 if (!name || !strlen(name))
1138 return !is_arm_mapping_symbol(name);
1142 * Find symbol based on relocation record info.
1143 * In some cases the symbol supplied is a valid symbol so
1144 * return refsym. If st_name != 0 we assume this is a valid symbol.
1145 * In other cases the symbol needs to be looked up in the symbol table
1146 * based on section and address.
1148 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1152 Elf_Sym *near = NULL;
1153 Elf64_Sword distance = 20;
1155 unsigned int relsym_secindex;
1157 if (relsym->st_name != 0)
1160 relsym_secindex = get_secindex(elf, relsym);
1161 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1162 if (get_secindex(elf, sym) != relsym_secindex)
1164 if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1166 if (!is_valid_name(elf, sym))
1168 if (sym->st_value == addr)
1170 /* Find a symbol nearby - addr are maybe negative */
1171 d = sym->st_value - addr;
1173 d = addr - sym->st_value;
1179 /* We need a close match */
1187 * Find symbols before or equal addr and after addr - in the section sec.
1188 * If we find two symbols with equal offset prefer one with a valid name.
1189 * The ELF format may have a better way to detect what type of symbol
1190 * it is, but this works for now.
1192 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1196 Elf_Sym *near = NULL;
1197 Elf_Addr distance = ~0;
1199 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1202 if (is_shndx_special(sym->st_shndx))
1204 symsec = sec_name(elf, get_secindex(elf, sym));
1205 if (strcmp(symsec, sec) != 0)
1207 if (!is_valid_name(elf, sym))
1209 if (sym->st_value <= addr && addr - sym->st_value <= distance) {
1210 distance = addr - sym->st_value;
1217 static int is_function(Elf_Sym *sym)
1220 return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1225 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1228 case 0: *name = "variable"; *name_p = ""; break;
1229 case 1: *name = "function"; *name_p = "()"; break;
1230 default: *name = "(unknown reference)"; *name_p = ""; break;
1235 * Print a warning about a section mismatch.
1236 * Try to find symbols near it so user can find it.
1237 * Check whitelist before warning - it may be a false positive.
1239 static void report_sec_mismatch(const char *modname,
1240 const struct sectioncheck *mismatch,
1241 const char *fromsec,
1242 const char *fromsym,
1243 const char *tosec, const char *tosym)
1245 sec_mismatch_count++;
1247 switch (mismatch->mismatch) {
1248 case TEXT_TO_ANY_INIT:
1249 case DATA_TO_ANY_INIT:
1250 case TEXT_TO_ANY_EXIT:
1251 case DATA_TO_ANY_EXIT:
1252 case XXXINIT_TO_SOME_INIT:
1253 case XXXEXIT_TO_SOME_EXIT:
1254 case ANY_INIT_TO_ANY_EXIT:
1255 case ANY_EXIT_TO_ANY_INIT:
1256 warn("%s: section mismatch in reference: %s (section: %s) -> %s (section: %s)\n",
1257 modname, fromsym, fromsec, tosym, tosec);
1259 case EXPORT_TO_INIT_EXIT:
1260 warn("%s: EXPORT_SYMBOL used for init/exit symbol: %s (section: %s)\n",
1261 modname, tosym, tosec);
1263 case EXTABLE_TO_NON_TEXT:
1264 fatal("There's a special handler for this mismatch type, we should never get here.\n");
1269 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1270 const struct sectioncheck* const mismatch,
1271 Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1277 const char *fromsym;
1279 from = find_elf_symbol2(elf, r->r_offset, fromsec);
1280 fromsym = sym_name(elf, from);
1282 tosec = sec_name(elf, get_secindex(elf, sym));
1283 to = find_elf_symbol(elf, r->r_addend, sym);
1284 tosym = sym_name(elf, to);
1286 /* check whitelist - we may ignore it */
1287 if (secref_whitelist(mismatch,
1288 fromsec, fromsym, tosec, tosym)) {
1289 report_sec_mismatch(modname, mismatch,
1290 fromsec, fromsym, tosec, tosym);
1294 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1296 if (section_index > elf->num_sections)
1297 fatal("section_index is outside elf->num_sections!\n");
1299 return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1303 * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1304 * to know the sizeof(struct exception_table_entry) for the target architecture.
1306 static unsigned int extable_entry_size = 0;
1307 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1310 * If we're currently checking the second relocation within __ex_table,
1311 * that relocation offset tells us the offsetof(struct
1312 * exception_table_entry, fixup) which is equal to sizeof(struct
1313 * exception_table_entry) divided by two. We use that to our advantage
1314 * since there's no portable way to get that size as every architecture
1315 * seems to go with different sized types. Not pretty but better than
1316 * hard-coding the size for every architecture..
1318 if (!extable_entry_size)
1319 extable_entry_size = r->r_offset * 2;
1322 static inline bool is_extable_fault_address(Elf_Rela *r)
1325 * extable_entry_size is only discovered after we've handled the
1326 * _second_ relocation in __ex_table, so only abort when we're not
1327 * handling the first reloc and extable_entry_size is zero.
1329 if (r->r_offset && extable_entry_size == 0)
1330 fatal("extable_entry size hasn't been discovered!\n");
1332 return ((r->r_offset == 0) ||
1333 (r->r_offset % extable_entry_size == 0));
1336 #define is_second_extable_reloc(Start, Cur, Sec) \
1337 (((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1339 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1340 const struct sectioncheck* const mismatch,
1341 Elf_Rela* r, Elf_Sym* sym,
1342 const char* fromsec, const char* tosec)
1344 Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1345 const char* fromsym_name = sym_name(elf, fromsym);
1346 Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1347 const char* tosym_name = sym_name(elf, tosym);
1348 const char* from_pretty_name;
1349 const char* from_pretty_name_p;
1350 const char* to_pretty_name;
1351 const char* to_pretty_name_p;
1353 get_pretty_name(is_function(fromsym),
1354 &from_pretty_name, &from_pretty_name_p);
1355 get_pretty_name(is_function(tosym),
1356 &to_pretty_name, &to_pretty_name_p);
1358 warn("%s(%s+0x%lx): Section mismatch in reference"
1359 " from the %s %s%s to the %s %s:%s%s\n",
1360 modname, fromsec, (long)r->r_offset, from_pretty_name,
1361 fromsym_name, from_pretty_name_p,
1362 to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1364 if (!match(tosec, mismatch->bad_tosec) &&
1365 is_executable_section(elf, get_secindex(elf, sym)))
1367 "The relocation at %s+0x%lx references\n"
1368 "section \"%s\" which is not in the list of\n"
1369 "authorized sections. If you're adding a new section\n"
1370 "and/or if this reference is valid, add \"%s\" to the\n"
1371 "list of authorized sections to jump to on fault.\n"
1372 "This can be achieved by adding \"%s\" to \n"
1373 "OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1374 fromsec, (long)r->r_offset, tosec, tosec, tosec);
1377 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1378 const struct sectioncheck* const mismatch,
1379 Elf_Rela* r, Elf_Sym* sym,
1380 const char *fromsec)
1382 const char* tosec = sec_name(elf, get_secindex(elf, sym));
1384 sec_mismatch_count++;
1386 report_extable_warnings(modname, elf, mismatch, r, sym, fromsec, tosec);
1388 if (match(tosec, mismatch->bad_tosec))
1389 fatal("The relocation at %s+0x%lx references\n"
1390 "section \"%s\" which is black-listed.\n"
1391 "Something is seriously wrong and should be fixed.\n"
1392 "You might get more information about where this is\n"
1393 "coming from by using scripts/check_extable.sh %s\n",
1394 fromsec, (long)r->r_offset, tosec, modname);
1395 else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1396 if (is_extable_fault_address(r))
1397 fatal("The relocation at %s+0x%lx references\n"
1398 "section \"%s\" which is not executable, IOW\n"
1399 "it is not possible for the kernel to fault\n"
1400 "at that address. Something is seriously wrong\n"
1401 "and should be fixed.\n",
1402 fromsec, (long)r->r_offset, tosec);
1404 fatal("The relocation at %s+0x%lx references\n"
1405 "section \"%s\" which is not executable, IOW\n"
1406 "the kernel will fault if it ever tries to\n"
1407 "jump to it. Something is seriously wrong\n"
1408 "and should be fixed.\n",
1409 fromsec, (long)r->r_offset, tosec);
1413 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1414 Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1416 const char *tosec = sec_name(elf, get_secindex(elf, sym));
1417 const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1420 if (mismatch->handler)
1421 mismatch->handler(modname, elf, mismatch,
1424 default_mismatch_handler(modname, elf, mismatch,
1429 static unsigned int *reloc_location(struct elf_info *elf,
1430 Elf_Shdr *sechdr, Elf_Rela *r)
1432 return sym_get_data_by_offset(elf, sechdr->sh_info, r->r_offset);
1435 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1437 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1438 unsigned int *location = reloc_location(elf, sechdr, r);
1442 r->r_addend = TO_NATIVE(*location);
1445 r->r_addend = TO_NATIVE(*location) + 4;
1452 #define R_ARM_CALL 28
1454 #ifndef R_ARM_JUMP24
1455 #define R_ARM_JUMP24 29
1458 #ifndef R_ARM_THM_CALL
1459 #define R_ARM_THM_CALL 10
1461 #ifndef R_ARM_THM_JUMP24
1462 #define R_ARM_THM_JUMP24 30
1464 #ifndef R_ARM_THM_JUMP19
1465 #define R_ARM_THM_JUMP19 51
1468 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1470 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1474 /* From ARM ABI: (S + A) | T */
1475 r->r_addend = (int)(long)
1476 (elf->symtab_start + ELF_R_SYM(r->r_info));
1481 case R_ARM_THM_CALL:
1482 case R_ARM_THM_JUMP24:
1483 case R_ARM_THM_JUMP19:
1484 /* From ARM ABI: ((S + A) | T) - P */
1485 r->r_addend = (int)(long)(elf->hdr +
1487 (r->r_offset - sechdr->sh_addr));
1495 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1497 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1498 unsigned int *location = reloc_location(elf, sechdr, r);
1501 if (r_typ == R_MIPS_HI16)
1502 return 1; /* skip this */
1503 inst = TO_NATIVE(*location);
1506 r->r_addend = inst & 0xffff;
1509 r->r_addend = (inst & 0x03ffffff) << 2;
1519 #define EM_RISCV 243
1522 #ifndef R_RISCV_SUB32
1523 #define R_RISCV_SUB32 39
1526 static void section_rela(const char *modname, struct elf_info *elf,
1533 const char *fromsec;
1535 Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1536 Elf_Rela *stop = (void *)start + sechdr->sh_size;
1538 fromsec = sec_name(elf, sechdr->sh_info);
1539 /* if from section (name) is know good then skip it */
1540 if (match(fromsec, section_white_list))
1543 for (rela = start; rela < stop; rela++) {
1544 r.r_offset = TO_NATIVE(rela->r_offset);
1545 #if KERNEL_ELFCLASS == ELFCLASS64
1546 if (elf->hdr->e_machine == EM_MIPS) {
1548 r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1549 r_sym = TO_NATIVE(r_sym);
1550 r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1551 r.r_info = ELF64_R_INFO(r_sym, r_typ);
1553 r.r_info = TO_NATIVE(rela->r_info);
1554 r_sym = ELF_R_SYM(r.r_info);
1557 r.r_info = TO_NATIVE(rela->r_info);
1558 r_sym = ELF_R_SYM(r.r_info);
1560 r.r_addend = TO_NATIVE(rela->r_addend);
1561 switch (elf->hdr->e_machine) {
1563 if (!strcmp("__ex_table", fromsec) &&
1564 ELF_R_TYPE(r.r_info) == R_RISCV_SUB32)
1568 sym = elf->symtab_start + r_sym;
1569 /* Skip special sections */
1570 if (is_shndx_special(sym->st_shndx))
1572 if (is_second_extable_reloc(start, rela, fromsec))
1573 find_extable_entry_size(fromsec, &r);
1574 check_section_mismatch(modname, elf, &r, sym, fromsec);
1578 static void section_rel(const char *modname, struct elf_info *elf,
1585 const char *fromsec;
1587 Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1588 Elf_Rel *stop = (void *)start + sechdr->sh_size;
1590 fromsec = sec_name(elf, sechdr->sh_info);
1591 /* if from section (name) is know good then skip it */
1592 if (match(fromsec, section_white_list))
1595 for (rel = start; rel < stop; rel++) {
1596 r.r_offset = TO_NATIVE(rel->r_offset);
1597 #if KERNEL_ELFCLASS == ELFCLASS64
1598 if (elf->hdr->e_machine == EM_MIPS) {
1600 r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1601 r_sym = TO_NATIVE(r_sym);
1602 r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1603 r.r_info = ELF64_R_INFO(r_sym, r_typ);
1605 r.r_info = TO_NATIVE(rel->r_info);
1606 r_sym = ELF_R_SYM(r.r_info);
1609 r.r_info = TO_NATIVE(rel->r_info);
1610 r_sym = ELF_R_SYM(r.r_info);
1613 switch (elf->hdr->e_machine) {
1615 if (addend_386_rel(elf, sechdr, &r))
1619 if (addend_arm_rel(elf, sechdr, &r))
1623 if (addend_mips_rel(elf, sechdr, &r))
1627 sym = elf->symtab_start + r_sym;
1628 /* Skip special sections */
1629 if (is_shndx_special(sym->st_shndx))
1631 if (is_second_extable_reloc(start, rel, fromsec))
1632 find_extable_entry_size(fromsec, &r);
1633 check_section_mismatch(modname, elf, &r, sym, fromsec);
1638 * A module includes a number of sections that are discarded
1639 * either when loaded or when used as built-in.
1640 * For loaded modules all functions marked __init and all data
1641 * marked __initdata will be discarded when the module has been initialized.
1642 * Likewise for modules used built-in the sections marked __exit
1643 * are discarded because __exit marked function are supposed to be called
1644 * only when a module is unloaded which never happens for built-in modules.
1645 * The check_sec_ref() function traverses all relocation records
1646 * to find all references to a section that reference a section that will
1647 * be discarded and warns about it.
1649 static void check_sec_ref(const char *modname, struct elf_info *elf)
1652 Elf_Shdr *sechdrs = elf->sechdrs;
1654 /* Walk through all sections */
1655 for (i = 0; i < elf->num_sections; i++) {
1656 check_section(modname, elf, &elf->sechdrs[i]);
1657 /* We want to process only relocation sections and not .init */
1658 if (sechdrs[i].sh_type == SHT_RELA)
1659 section_rela(modname, elf, &elf->sechdrs[i]);
1660 else if (sechdrs[i].sh_type == SHT_REL)
1661 section_rel(modname, elf, &elf->sechdrs[i]);
1665 static char *remove_dot(char *s)
1667 size_t n = strcspn(s, ".");
1670 size_t m = strspn(s + n + 1, "0123456789");
1671 if (m && (s[n + m + 1] == '.' || s[n + m + 1] == 0))
1678 * The CRCs are recorded in .*.cmd files in the form of:
1679 * #SYMVER <name> <crc>
1681 static void extract_crcs_for_object(const char *object, struct module *mod)
1683 char cmd_file[PATH_MAX];
1688 base = strrchr(object, '/');
1691 dirlen = base - object;
1697 ret = snprintf(cmd_file, sizeof(cmd_file), "%.*s.%s.cmd",
1698 dirlen, object, base);
1699 if (ret >= sizeof(cmd_file)) {
1700 error("%s: too long path was truncated\n", cmd_file);
1704 buf = read_text_file(cmd_file);
1707 while ((p = strstr(p, "\n#SYMVER "))) {
1713 name = p + strlen("\n#SYMVER ");
1715 p = strchr(name, ' ');
1723 continue; /* skip this line */
1725 crc = strtol(p, &p, 0);
1727 continue; /* skip this line */
1729 name[namelen] = '\0';
1732 * sym_find_with_module() may return NULL here.
1733 * It typically occurs when CONFIG_TRIM_UNUSED_KSYMS=y.
1734 * Since commit e1327a127703, genksyms calculates CRCs of all
1735 * symbols, including trimmed ones. Ignore orphan CRCs.
1737 sym = sym_find_with_module(name, mod);
1739 sym_set_crc(sym, crc);
1746 * The symbol versions (CRC) are recorded in the .*.cmd files.
1747 * Parse them to retrieve CRCs for the current module.
1749 static void mod_set_crcs(struct module *mod)
1751 char objlist[PATH_MAX];
1752 char *buf, *p, *obj;
1755 if (mod->is_vmlinux) {
1756 strcpy(objlist, ".vmlinux.objs");
1758 /* objects for a module are listed in the *.mod file. */
1759 ret = snprintf(objlist, sizeof(objlist), "%s.mod", mod->name);
1760 if (ret >= sizeof(objlist)) {
1761 error("%s: too long path was truncated\n", objlist);
1766 buf = read_text_file(objlist);
1769 while ((obj = strsep(&p, "\n")) && obj[0])
1770 extract_crcs_for_object(obj, mod);
1775 static void read_symbols(const char *modname)
1777 const char *symname;
1782 struct elf_info info = { };
1785 if (!parse_elf(&info, modname))
1788 if (!strends(modname, ".o")) {
1789 error("%s: filename must be suffixed with .o\n", modname);
1793 /* strip trailing .o */
1794 mod = new_module(modname, strlen(modname) - strlen(".o"));
1796 if (!mod->is_vmlinux) {
1797 license = get_modinfo(&info, "license");
1799 error("missing MODULE_LICENSE() in %s\n", modname);
1801 if (!license_is_gpl_compatible(license)) {
1802 mod->is_gpl_compatible = false;
1805 license = get_next_modinfo(&info, "license", license);
1808 namespace = get_modinfo(&info, "import_ns");
1810 add_namespace(&mod->imported_namespaces, namespace);
1811 namespace = get_next_modinfo(&info, "import_ns",
1816 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1817 symname = remove_dot(info.strtab + sym->st_name);
1819 handle_symbol(mod, &info, sym, symname);
1820 handle_moddevtable(mod, &info, sym, symname);
1823 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1824 symname = remove_dot(info.strtab + sym->st_name);
1826 /* Apply symbol namespaces from __kstrtabns_<symbol> entries. */
1827 if (strstarts(symname, "__kstrtabns_"))
1828 sym_update_namespace(symname + strlen("__kstrtabns_"),
1829 sym_get_data(&info, sym));
1832 check_sec_ref(modname, &info);
1834 if (!mod->is_vmlinux) {
1835 version = get_modinfo(&info, "version");
1836 if (version || all_versions)
1837 get_src_version(mod->name, mod->srcversion,
1838 sizeof(mod->srcversion) - 1);
1841 parse_elf_finish(&info);
1845 * Our trick to get versioning for module struct etc. - it's
1846 * never passed as an argument to an exported function, so
1847 * the automatic versioning doesn't pick it up, but it's really
1850 sym_add_unresolved("module_layout", mod, false);
1856 static void read_symbols_from_files(const char *filename)
1859 char fname[PATH_MAX];
1861 if (strcmp(filename, "-") != 0) {
1862 in = fopen(filename, "r");
1864 fatal("Can't open filenames file %s: %m", filename);
1867 while (fgets(fname, PATH_MAX, in) != NULL) {
1868 if (strends(fname, "\n"))
1869 fname[strlen(fname)-1] = '\0';
1870 read_symbols(fname);
1879 /* We first write the generated file into memory using the
1880 * following helper, then compare to the file on disk and
1881 * only update the later if anything changed */
1883 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
1884 const char *fmt, ...)
1891 len = vsnprintf(tmp, SZ, fmt, ap);
1892 buf_write(buf, tmp, len);
1896 void buf_write(struct buffer *buf, const char *s, int len)
1898 if (buf->size - buf->pos < len) {
1899 buf->size += len + SZ;
1900 buf->p = NOFAIL(realloc(buf->p, buf->size));
1902 strncpy(buf->p + buf->pos, s, len);
1906 static void check_exports(struct module *mod)
1908 struct symbol *s, *exp;
1910 list_for_each_entry(s, &mod->unresolved_symbols, list) {
1911 const char *basename;
1912 exp = find_symbol(s->name);
1914 if (!s->weak && nr_unresolved++ < MAX_UNRESOLVED_REPORTS)
1915 modpost_log(warn_unresolved ? LOG_WARN : LOG_ERROR,
1916 "\"%s\" [%s.ko] undefined!\n",
1917 s->name, mod->name);
1920 if (exp->module == mod) {
1921 error("\"%s\" [%s.ko] was exported without definition\n",
1922 s->name, mod->name);
1926 s->module = exp->module;
1927 s->crc_valid = exp->crc_valid;
1930 basename = strrchr(mod->name, '/');
1934 basename = mod->name;
1936 if (exp->namespace &&
1937 !contains_namespace(&mod->imported_namespaces, exp->namespace)) {
1938 modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
1939 "module %s uses symbol %s from namespace %s, but does not import it.\n",
1940 basename, exp->name, exp->namespace);
1941 add_namespace(&mod->missing_namespaces, exp->namespace);
1944 if (!mod->is_gpl_compatible && exp->is_gpl_only)
1945 error("GPL-incompatible module %s.ko uses GPL-only symbol '%s'\n",
1946 basename, exp->name);
1950 static void check_modname_len(struct module *mod)
1952 const char *mod_name;
1954 mod_name = strrchr(mod->name, '/');
1955 if (mod_name == NULL)
1956 mod_name = mod->name;
1959 if (strlen(mod_name) >= MODULE_NAME_LEN)
1960 error("module name is too long [%s.ko]\n", mod->name);
1964 * Header for the generated file
1966 static void add_header(struct buffer *b, struct module *mod)
1968 buf_printf(b, "#include <linux/module.h>\n");
1970 * Include build-salt.h after module.h in order to
1971 * inherit the definitions.
1973 buf_printf(b, "#define INCLUDE_VERMAGIC\n");
1974 buf_printf(b, "#include <linux/build-salt.h>\n");
1975 buf_printf(b, "#include <linux/elfnote-lto.h>\n");
1976 buf_printf(b, "#include <linux/export-internal.h>\n");
1977 buf_printf(b, "#include <linux/vermagic.h>\n");
1978 buf_printf(b, "#include <linux/compiler.h>\n");
1979 buf_printf(b, "\n");
1980 buf_printf(b, "BUILD_SALT;\n");
1981 buf_printf(b, "BUILD_LTO_INFO;\n");
1982 buf_printf(b, "\n");
1983 buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
1984 buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
1985 buf_printf(b, "\n");
1986 buf_printf(b, "__visible struct module __this_module\n");
1987 buf_printf(b, "__section(\".gnu.linkonce.this_module\") = {\n");
1988 buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
1990 buf_printf(b, "\t.init = init_module,\n");
1991 if (mod->has_cleanup)
1992 buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
1993 "\t.exit = cleanup_module,\n"
1995 buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
1996 buf_printf(b, "};\n");
1998 if (!external_module)
1999 buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2003 "#ifdef CONFIG_RETPOLINE\n"
2004 "MODULE_INFO(retpoline, \"Y\");\n"
2007 if (strstarts(mod->name, "drivers/staging"))
2008 buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2010 if (strstarts(mod->name, "tools/testing"))
2011 buf_printf(b, "\nMODULE_INFO(test, \"Y\");\n");
2014 static void add_exported_symbols(struct buffer *buf, struct module *mod)
2021 /* record CRCs for exported symbols */
2022 buf_printf(buf, "\n");
2023 list_for_each_entry(sym, &mod->exported_symbols, list) {
2024 if (!sym->crc_valid)
2025 warn("EXPORT symbol \"%s\" [%s%s] version generation failed, symbol will not be versioned.\n"
2026 "Is \"%s\" prototyped in <asm/asm-prototypes.h>?\n",
2027 sym->name, mod->name, mod->is_vmlinux ? "" : ".ko",
2030 buf_printf(buf, "SYMBOL_CRC(%s, 0x%08x, \"%s\");\n",
2031 sym->name, sym->crc, sym->is_gpl_only ? "_gpl" : "");
2036 * Record CRCs for unresolved symbols
2038 static void add_versions(struct buffer *b, struct module *mod)
2045 buf_printf(b, "\n");
2046 buf_printf(b, "static const struct modversion_info ____versions[]\n");
2047 buf_printf(b, "__used __section(\"__versions\") = {\n");
2049 list_for_each_entry(s, &mod->unresolved_symbols, list) {
2052 if (!s->crc_valid) {
2053 warn("\"%s\" [%s.ko] has no CRC!\n",
2054 s->name, mod->name);
2057 if (strlen(s->name) >= MODULE_NAME_LEN) {
2058 error("too long symbol \"%s\" [%s.ko]\n",
2059 s->name, mod->name);
2062 buf_printf(b, "\t{ %#8x, \"%s\" },\n",
2066 buf_printf(b, "};\n");
2069 static void add_depends(struct buffer *b, struct module *mod)
2074 /* Clear ->seen flag of modules that own symbols needed by this. */
2075 list_for_each_entry(s, &mod->unresolved_symbols, list) {
2077 s->module->seen = s->module->is_vmlinux;
2080 buf_printf(b, "\n");
2081 buf_printf(b, "MODULE_INFO(depends, \"");
2082 list_for_each_entry(s, &mod->unresolved_symbols, list) {
2087 if (s->module->seen)
2090 s->module->seen = true;
2091 p = strrchr(s->module->name, '/');
2095 p = s->module->name;
2096 buf_printf(b, "%s%s", first ? "" : ",", p);
2099 buf_printf(b, "\");\n");
2102 static void add_srcversion(struct buffer *b, struct module *mod)
2104 if (mod->srcversion[0]) {
2105 buf_printf(b, "\n");
2106 buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2111 static void write_buf(struct buffer *b, const char *fname)
2118 file = fopen(fname, "w");
2123 if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2127 if (fclose(file) != 0) {
2133 static void write_if_changed(struct buffer *b, const char *fname)
2139 file = fopen(fname, "r");
2143 if (fstat(fileno(file), &st) < 0)
2146 if (st.st_size != b->pos)
2149 tmp = NOFAIL(malloc(b->pos));
2150 if (fread(tmp, 1, b->pos, file) != b->pos)
2153 if (memcmp(tmp, b->p, b->pos) != 0)
2165 write_buf(b, fname);
2168 static void write_vmlinux_export_c_file(struct module *mod)
2170 struct buffer buf = { };
2173 "#include <linux/export-internal.h>\n");
2175 add_exported_symbols(&buf, mod);
2176 write_if_changed(&buf, ".vmlinux.export.c");
2180 /* do sanity checks, and generate *.mod.c file */
2181 static void write_mod_c_file(struct module *mod)
2183 struct buffer buf = { };
2184 char fname[PATH_MAX];
2187 check_modname_len(mod);
2190 add_header(&buf, mod);
2191 add_exported_symbols(&buf, mod);
2192 add_versions(&buf, mod);
2193 add_depends(&buf, mod);
2194 add_moddevtable(&buf, mod);
2195 add_srcversion(&buf, mod);
2197 ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
2198 if (ret >= sizeof(fname)) {
2199 error("%s: too long path was truncated\n", fname);
2203 write_if_changed(&buf, fname);
2209 /* parse Module.symvers file. line format:
2210 * 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace
2212 static void read_dump(const char *fname)
2214 char *buf, *pos, *line;
2216 buf = read_text_file(fname);
2218 /* No symbol versions, silently ignore */
2223 while ((line = get_line(&pos))) {
2224 char *symname, *namespace, *modname, *d, *export;
2230 if (!(symname = strchr(line, '\t')))
2233 if (!(modname = strchr(symname, '\t')))
2236 if (!(export = strchr(modname, '\t')))
2239 if (!(namespace = strchr(export, '\t')))
2241 *namespace++ = '\0';
2243 crc = strtoul(line, &d, 16);
2244 if (*symname == '\0' || *modname == '\0' || *d != '\0')
2247 if (!strcmp(export, "EXPORT_SYMBOL_GPL")) {
2249 } else if (!strcmp(export, "EXPORT_SYMBOL")) {
2252 error("%s: unknown license %s. skip", symname, export);
2256 mod = find_module(modname);
2258 mod = new_module(modname, strlen(modname));
2259 mod->from_dump = true;
2261 s = sym_add_exported(symname, mod, gpl_only);
2262 sym_set_crc(s, crc);
2263 sym_update_namespace(symname, namespace);
2269 fatal("parse error in symbol dump file\n");
2272 static void write_dump(const char *fname)
2274 struct buffer buf = { };
2278 list_for_each_entry(mod, &modules, list) {
2281 list_for_each_entry(sym, &mod->exported_symbols, list) {
2282 buf_printf(&buf, "0x%08x\t%s\t%s\tEXPORT_SYMBOL%s\t%s\n",
2283 sym->crc, sym->name, mod->name,
2284 sym->is_gpl_only ? "_GPL" : "",
2285 sym->namespace ?: "");
2288 write_buf(&buf, fname);
2292 static void write_namespace_deps_files(const char *fname)
2295 struct namespace_list *ns;
2296 struct buffer ns_deps_buf = {};
2298 list_for_each_entry(mod, &modules, list) {
2300 if (mod->from_dump || list_empty(&mod->missing_namespaces))
2303 buf_printf(&ns_deps_buf, "%s.ko:", mod->name);
2305 list_for_each_entry(ns, &mod->missing_namespaces, list)
2306 buf_printf(&ns_deps_buf, " %s", ns->namespace);
2308 buf_printf(&ns_deps_buf, "\n");
2311 write_if_changed(&ns_deps_buf, fname);
2312 free(ns_deps_buf.p);
2316 struct list_head list;
2320 int main(int argc, char **argv)
2323 char *missing_namespace_deps = NULL;
2324 char *dump_write = NULL, *files_source = NULL;
2326 LIST_HEAD(dump_lists);
2327 struct dump_list *dl, *dl2;
2329 while ((opt = getopt(argc, argv, "ei:mnT:o:awENd:")) != -1) {
2332 external_module = true;
2335 dl = NOFAIL(malloc(sizeof(*dl)));
2337 list_add_tail(&dl->list, &dump_lists);
2343 ignore_missing_files = true;
2346 dump_write = optarg;
2349 all_versions = true;
2352 files_source = optarg;
2355 warn_unresolved = true;
2358 sec_mismatch_warn_only = false;
2361 allow_missing_ns_imports = true;
2364 missing_namespace_deps = optarg;
2371 list_for_each_entry_safe(dl, dl2, &dump_lists, list) {
2372 read_dump(dl->file);
2373 list_del(&dl->list);
2377 while (optind < argc)
2378 read_symbols(argv[optind++]);
2381 read_symbols_from_files(files_source);
2383 list_for_each_entry(mod, &modules, list) {
2387 if (mod->is_vmlinux)
2388 write_vmlinux_export_c_file(mod);
2390 write_mod_c_file(mod);
2393 if (missing_namespace_deps)
2394 write_namespace_deps_files(missing_namespace_deps);
2397 write_dump(dump_write);
2398 if (sec_mismatch_count && !sec_mismatch_warn_only)
2399 error("Section mismatches detected.\n"
2400 "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2402 if (nr_unresolved > MAX_UNRESOLVED_REPORTS)
2403 warn("suppressed %u unresolved symbol warnings because there were too many)\n",
2404 nr_unresolved - MAX_UNRESOLVED_REPORTS);
2406 return error_occurred ? 1 : 0;