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 ...
23 #include "../../include/linux/license.h"
25 /* Are we using CONFIG_MODVERSIONS? */
26 static bool modversions;
27 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
28 static bool all_versions;
29 /* If we are modposting external module set to 1 */
30 static bool external_module;
31 /* Only warn about unresolved symbols */
32 static bool warn_unresolved;
33 /* How a symbol is exported */
34 static int sec_mismatch_count;
35 static bool sec_mismatch_warn_only = true;
36 /* ignore missing files */
37 static bool ignore_missing_files;
38 /* If set to 1, only warn (instead of error) about missing ns imports */
39 static bool allow_missing_ns_imports;
41 static bool error_occurred;
44 * Cut off the warnings when there are too many. This typically occurs when
45 * vmlinux is missing. ('make modules' without building vmlinux.)
47 #define MAX_UNRESOLVED_REPORTS 10
48 static unsigned int nr_unresolved;
56 /* In kernel, this size is defined in linux/module.h;
57 * here we use Elf_Addr instead of long for covering cross-compile
60 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
62 void __attribute__((format(printf, 2, 3)))
63 modpost_log(enum loglevel loglevel, const char *fmt, ...)
69 fprintf(stderr, "WARNING: ");
72 fprintf(stderr, "ERROR: ");
75 fprintf(stderr, "FATAL: ");
77 default: /* invalid loglevel, ignore */
81 fprintf(stderr, "modpost: ");
83 va_start(arglist, fmt);
84 vfprintf(stderr, fmt, arglist);
87 if (loglevel == LOG_FATAL)
89 if (loglevel == LOG_ERROR)
90 error_occurred = true;
93 static inline bool strends(const char *str, const char *postfix)
95 if (strlen(str) < strlen(postfix))
98 return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
101 void *do_nofail(void *ptr, const char *expr)
104 fatal("Memory allocation failure: %s.\n", expr);
109 char *read_text_file(const char *filename)
116 fd = open(filename, O_RDONLY);
122 if (fstat(fd, &st) < 0) {
127 buf = NOFAIL(malloc(st.st_size + 1));
134 bytes_read = read(fd, buf, nbytes);
135 if (bytes_read < 0) {
140 nbytes -= bytes_read;
142 buf[st.st_size] = '\0';
149 char *get_line(char **stringp)
151 char *orig = *stringp, *next;
153 /* do not return the unwanted extra line at EOF */
154 if (!orig || *orig == '\0')
157 /* don't use strsep here, it is not available everywhere */
158 next = strchr(orig, '\n');
167 /* A list of all modules we processed */
170 static struct module *find_module(const char *modname)
174 list_for_each_entry(mod, &modules, list) {
175 if (strcmp(mod->name, modname) == 0)
181 static struct module *new_module(const char *modname)
185 mod = NOFAIL(malloc(sizeof(*mod) + strlen(modname) + 1));
186 memset(mod, 0, sizeof(*mod));
188 strcpy(mod->name, modname);
189 mod->is_vmlinux = (strcmp(modname, "vmlinux") == 0);
192 * Set mod->is_gpl_compatible to true by default. If MODULE_LICENSE()
193 * is missing, do not check the use for EXPORT_SYMBOL_GPL() becasue
194 * modpost will exit wiht error anyway.
196 mod->is_gpl_compatible = true;
198 list_add_tail(&mod->list, &modules);
203 /* A hash of all exported symbols,
204 * struct symbol is also used for lists of unresolved symbols */
206 #define SYMBOL_HASH_SIZE 1024
210 struct module *module;
215 bool is_static; /* true if symbol is not global */
216 enum export export; /* Type of export */
220 static struct symbol *symbolhash[SYMBOL_HASH_SIZE];
222 /* This is based on the hash algorithm from gdbm, via tdb */
223 static inline unsigned int tdb_hash(const char *name)
225 unsigned value; /* Used to compute the hash value. */
226 unsigned i; /* Used to cycle through random values. */
228 /* Set the initial value from the key size. */
229 for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++)
230 value = (value + (((unsigned char *)name)[i] << (i*5 % 24)));
232 return (1103515243 * value + 12345);
236 * Allocate a new symbols for use in the hash of exported symbols or
237 * the list of unresolved symbols per module
239 static struct symbol *alloc_symbol(const char *name, struct symbol *next)
241 struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
243 memset(s, 0, sizeof(*s));
244 strcpy(s->name, name);
250 /* For the hash of exported symbols */
251 static struct symbol *new_symbol(const char *name, struct module *module,
256 hash = tdb_hash(name) % SYMBOL_HASH_SIZE;
257 symbolhash[hash] = alloc_symbol(name, symbolhash[hash]);
259 return symbolhash[hash];
262 static void sym_add_unresolved(const char *name, struct module *mod, bool weak)
264 mod->unres = alloc_symbol(name, mod->unres);
265 mod->unres->weak = weak;
268 static struct symbol *find_symbol(const char *name)
272 /* For our purposes, .foo matches foo. PPC64 needs this. */
276 for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
277 if (strcmp(s->name, name) == 0)
283 struct namespace_list {
284 struct namespace_list *next;
288 static bool contains_namespace(struct namespace_list *list,
289 const char *namespace)
291 for (; list; list = list->next)
292 if (!strcmp(list->namespace, namespace))
298 static void add_namespace(struct namespace_list **list, const char *namespace)
300 struct namespace_list *ns_entry;
302 if (!contains_namespace(*list, namespace)) {
303 ns_entry = NOFAIL(malloc(sizeof(struct namespace_list) +
304 strlen(namespace) + 1));
305 strcpy(ns_entry->namespace, namespace);
306 ns_entry->next = *list;
311 static bool module_imports_namespace(struct module *module,
312 const char *namespace)
314 return contains_namespace(module->imported_namespaces, namespace);
317 static const struct {
321 { .str = "EXPORT_SYMBOL", .export = export_plain },
322 { .str = "EXPORT_SYMBOL_GPL", .export = export_gpl },
323 { .str = "(unknown)", .export = export_unknown },
327 static const char *export_str(enum export ex)
329 return export_list[ex].str;
332 static enum export export_no(const char *s)
337 return export_unknown;
338 for (i = 0; export_list[i].export != export_unknown; i++) {
339 if (strcmp(export_list[i].str, s) == 0)
340 return export_list[i].export;
342 return export_unknown;
345 static void *sym_get_data_by_offset(const struct elf_info *info,
346 unsigned int secindex, unsigned long offset)
348 Elf_Shdr *sechdr = &info->sechdrs[secindex];
350 if (info->hdr->e_type != ET_REL)
351 offset -= sechdr->sh_addr;
353 return (void *)info->hdr + sechdr->sh_offset + offset;
356 static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)
358 return sym_get_data_by_offset(info, get_secindex(info, sym),
362 static const char *sech_name(const struct elf_info *info, Elf_Shdr *sechdr)
364 return sym_get_data_by_offset(info, info->secindex_strings,
368 static const char *sec_name(const struct elf_info *info, int secindex)
370 return sech_name(info, &info->sechdrs[secindex]);
373 #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
375 static enum export export_from_secname(struct elf_info *elf, unsigned int sec)
377 const char *secname = sec_name(elf, sec);
379 if (strstarts(secname, "___ksymtab+"))
381 else if (strstarts(secname, "___ksymtab_gpl+"))
384 return export_unknown;
387 static void sym_update_namespace(const char *symname, const char *namespace)
389 struct symbol *s = find_symbol(symname);
392 * That symbol should have been created earlier and thus this is
393 * actually an assertion.
396 error("Could not update namespace(%s) for symbol %s\n",
402 s->namespace = namespace[0] ? NOFAIL(strdup(namespace)) : NULL;
405 static struct symbol *sym_add_exported(const char *name, struct module *mod,
408 struct symbol *s = find_symbol(name);
411 s = new_symbol(name, mod, export);
412 } else if (!external_module || s->module->is_vmlinux ||
414 warn("%s: '%s' exported twice. Previous export was in %s%s\n",
415 mod->name, name, s->module->name,
416 s->module->is_vmlinux ? "" : ".ko");
425 static void sym_set_crc(const char *name, unsigned int crc)
427 struct symbol *s = find_symbol(name);
430 * Ignore stand-alone __crc_*, which might be auto-generated symbols
431 * such as __*_veneer in ARM ELF.
440 static void *grab_file(const char *filename, size_t *size)
443 void *map = MAP_FAILED;
446 fd = open(filename, O_RDONLY);
453 map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
457 if (map == MAP_FAILED)
462 static void release_file(void *file, size_t size)
467 static int parse_elf(struct elf_info *info, const char *filename)
473 const char *secstrings;
474 unsigned int symtab_idx = ~0U, symtab_shndx_idx = ~0U;
476 hdr = grab_file(filename, &info->size);
478 if (ignore_missing_files) {
479 fprintf(stderr, "%s: %s (ignored)\n", filename,
487 if (info->size < sizeof(*hdr)) {
488 /* file too small, assume this is an empty .o file */
491 /* Is this a valid ELF file? */
492 if ((hdr->e_ident[EI_MAG0] != ELFMAG0) ||
493 (hdr->e_ident[EI_MAG1] != ELFMAG1) ||
494 (hdr->e_ident[EI_MAG2] != ELFMAG2) ||
495 (hdr->e_ident[EI_MAG3] != ELFMAG3)) {
496 /* Not an ELF file - silently ignore it */
499 /* Fix endianness in ELF header */
500 hdr->e_type = TO_NATIVE(hdr->e_type);
501 hdr->e_machine = TO_NATIVE(hdr->e_machine);
502 hdr->e_version = TO_NATIVE(hdr->e_version);
503 hdr->e_entry = TO_NATIVE(hdr->e_entry);
504 hdr->e_phoff = TO_NATIVE(hdr->e_phoff);
505 hdr->e_shoff = TO_NATIVE(hdr->e_shoff);
506 hdr->e_flags = TO_NATIVE(hdr->e_flags);
507 hdr->e_ehsize = TO_NATIVE(hdr->e_ehsize);
508 hdr->e_phentsize = TO_NATIVE(hdr->e_phentsize);
509 hdr->e_phnum = TO_NATIVE(hdr->e_phnum);
510 hdr->e_shentsize = TO_NATIVE(hdr->e_shentsize);
511 hdr->e_shnum = TO_NATIVE(hdr->e_shnum);
512 hdr->e_shstrndx = TO_NATIVE(hdr->e_shstrndx);
513 sechdrs = (void *)hdr + hdr->e_shoff;
514 info->sechdrs = sechdrs;
516 /* Check if file offset is correct */
517 if (hdr->e_shoff > info->size) {
518 fatal("section header offset=%lu in file '%s' is bigger than filesize=%zu\n",
519 (unsigned long)hdr->e_shoff, filename, info->size);
523 if (hdr->e_shnum == SHN_UNDEF) {
525 * There are more than 64k sections,
526 * read count from .sh_size.
528 info->num_sections = TO_NATIVE(sechdrs[0].sh_size);
531 info->num_sections = hdr->e_shnum;
533 if (hdr->e_shstrndx == SHN_XINDEX) {
534 info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link);
537 info->secindex_strings = hdr->e_shstrndx;
540 /* Fix endianness in section headers */
541 for (i = 0; i < info->num_sections; i++) {
542 sechdrs[i].sh_name = TO_NATIVE(sechdrs[i].sh_name);
543 sechdrs[i].sh_type = TO_NATIVE(sechdrs[i].sh_type);
544 sechdrs[i].sh_flags = TO_NATIVE(sechdrs[i].sh_flags);
545 sechdrs[i].sh_addr = TO_NATIVE(sechdrs[i].sh_addr);
546 sechdrs[i].sh_offset = TO_NATIVE(sechdrs[i].sh_offset);
547 sechdrs[i].sh_size = TO_NATIVE(sechdrs[i].sh_size);
548 sechdrs[i].sh_link = TO_NATIVE(sechdrs[i].sh_link);
549 sechdrs[i].sh_info = TO_NATIVE(sechdrs[i].sh_info);
550 sechdrs[i].sh_addralign = TO_NATIVE(sechdrs[i].sh_addralign);
551 sechdrs[i].sh_entsize = TO_NATIVE(sechdrs[i].sh_entsize);
553 /* Find symbol table. */
554 secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset;
555 for (i = 1; i < info->num_sections; i++) {
557 int nobits = sechdrs[i].sh_type == SHT_NOBITS;
559 if (!nobits && sechdrs[i].sh_offset > info->size) {
560 fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
561 "sizeof(*hrd)=%zu\n", filename,
562 (unsigned long)sechdrs[i].sh_offset,
566 secname = secstrings + sechdrs[i].sh_name;
567 if (strcmp(secname, ".modinfo") == 0) {
569 fatal("%s has NOBITS .modinfo\n", filename);
570 info->modinfo = (void *)hdr + sechdrs[i].sh_offset;
571 info->modinfo_len = sechdrs[i].sh_size;
574 if (sechdrs[i].sh_type == SHT_SYMTAB) {
575 unsigned int sh_link_idx;
577 info->symtab_start = (void *)hdr +
578 sechdrs[i].sh_offset;
579 info->symtab_stop = (void *)hdr +
580 sechdrs[i].sh_offset + sechdrs[i].sh_size;
581 sh_link_idx = sechdrs[i].sh_link;
582 info->strtab = (void *)hdr +
583 sechdrs[sh_link_idx].sh_offset;
586 /* 32bit section no. table? ("more than 64k sections") */
587 if (sechdrs[i].sh_type == SHT_SYMTAB_SHNDX) {
588 symtab_shndx_idx = i;
589 info->symtab_shndx_start = (void *)hdr +
590 sechdrs[i].sh_offset;
591 info->symtab_shndx_stop = (void *)hdr +
592 sechdrs[i].sh_offset + sechdrs[i].sh_size;
595 if (!info->symtab_start)
596 fatal("%s has no symtab?\n", filename);
598 /* Fix endianness in symbols */
599 for (sym = info->symtab_start; sym < info->symtab_stop; sym++) {
600 sym->st_shndx = TO_NATIVE(sym->st_shndx);
601 sym->st_name = TO_NATIVE(sym->st_name);
602 sym->st_value = TO_NATIVE(sym->st_value);
603 sym->st_size = TO_NATIVE(sym->st_size);
606 if (symtab_shndx_idx != ~0U) {
608 if (symtab_idx != sechdrs[symtab_shndx_idx].sh_link)
609 fatal("%s: SYMTAB_SHNDX has bad sh_link: %u!=%u\n",
610 filename, sechdrs[symtab_shndx_idx].sh_link,
613 for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop;
621 static void parse_elf_finish(struct elf_info *info)
623 release_file(info->hdr, info->size);
626 static int ignore_undef_symbol(struct elf_info *info, const char *symname)
628 /* ignore __this_module, it will be resolved shortly */
629 if (strcmp(symname, "__this_module") == 0)
631 /* ignore global offset table */
632 if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0)
634 if (info->hdr->e_machine == EM_PPC)
635 /* Special register function linked on all modules during final link of .ko */
636 if (strstarts(symname, "_restgpr_") ||
637 strstarts(symname, "_savegpr_") ||
638 strstarts(symname, "_rest32gpr_") ||
639 strstarts(symname, "_save32gpr_") ||
640 strstarts(symname, "_restvr_") ||
641 strstarts(symname, "_savevr_"))
643 if (info->hdr->e_machine == EM_PPC64)
644 /* Special register function linked on all modules during final link of .ko */
645 if (strstarts(symname, "_restgpr0_") ||
646 strstarts(symname, "_savegpr0_") ||
647 strstarts(symname, "_restvr_") ||
648 strstarts(symname, "_savevr_") ||
649 strcmp(symname, ".TOC.") == 0)
652 if (info->hdr->e_machine == EM_S390)
653 /* Expoline thunks are linked on all kernel modules during final link of .ko */
654 if (strstarts(symname, "__s390_indirect_jump_r"))
656 /* Do not ignore this symbol */
660 static void handle_modversion(const struct module *mod,
661 const struct elf_info *info,
662 const Elf_Sym *sym, const char *symname)
666 if (sym->st_shndx == SHN_UNDEF) {
667 warn("EXPORT symbol \"%s\" [%s%s] version generation failed, symbol will not be versioned.\n"
668 "Is \"%s\" prototyped in <asm/asm-prototypes.h>?\n",
669 symname, mod->name, mod->is_vmlinux ? "" : ".ko",
675 if (sym->st_shndx == SHN_ABS) {
680 /* symbol points to the CRC in the ELF object */
681 crcp = sym_get_data(info, sym);
682 crc = TO_NATIVE(*crcp);
684 sym_set_crc(symname, crc);
687 static void handle_symbol(struct module *mod, struct elf_info *info,
688 const Elf_Sym *sym, const char *symname)
692 switch (sym->st_shndx) {
694 if (strstarts(symname, "__gnu_lto_")) {
695 /* Should warn here, but modpost runs before the linker */
697 warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
700 /* undefined symbol */
701 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
702 ELF_ST_BIND(sym->st_info) != STB_WEAK)
704 if (ignore_undef_symbol(info, symname))
706 if (info->hdr->e_machine == EM_SPARC ||
707 info->hdr->e_machine == EM_SPARCV9) {
708 /* Ignore register directives. */
709 if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
711 if (symname[0] == '.') {
712 char *munged = NOFAIL(strdup(symname));
714 munged[1] = toupper(munged[1]);
719 sym_add_unresolved(symname, mod,
720 ELF_ST_BIND(sym->st_info) == STB_WEAK);
723 /* All exported symbols */
724 if (strstarts(symname, "__ksymtab_")) {
727 name = symname + strlen("__ksymtab_");
728 export = export_from_secname(info,
729 get_secindex(info, sym));
730 sym_add_exported(name, mod, export);
732 if (strcmp(symname, "init_module") == 0)
733 mod->has_init = true;
734 if (strcmp(symname, "cleanup_module") == 0)
735 mod->has_cleanup = true;
741 * Parse tag=value strings from .modinfo section
743 static char *next_string(char *string, unsigned long *secsize)
745 /* Skip non-zero chars */
748 if ((*secsize)-- <= 1)
752 /* Skip any zero padding. */
755 if ((*secsize)-- <= 1)
761 static char *get_next_modinfo(struct elf_info *info, const char *tag,
765 unsigned int taglen = strlen(tag);
766 char *modinfo = info->modinfo;
767 unsigned long size = info->modinfo_len;
770 size -= prev - modinfo;
771 modinfo = next_string(prev, &size);
774 for (p = modinfo; p; p = next_string(p, &size)) {
775 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
776 return p + taglen + 1;
781 static char *get_modinfo(struct elf_info *info, const char *tag)
784 return get_next_modinfo(info, tag, NULL);
788 * Test if string s ends in string sub
791 static int strrcmp(const char *s, const char *sub)
799 sublen = strlen(sub);
801 if ((slen == 0) || (sublen == 0))
807 return memcmp(s + slen - sublen, sub, sublen);
810 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
813 return elf->strtab + sym->st_name;
818 /* The pattern is an array of simple patterns.
819 * "foo" will match an exact string equal to "foo"
820 * "*foo" will match a string that ends with "foo"
821 * "foo*" will match a string that begins with "foo"
822 * "*foo*" will match a string that contains "foo"
824 static int match(const char *sym, const char * const pat[])
831 endp = p + strlen(p) - 1;
834 if (*p == '*' && *endp == '*') {
835 char *bare = NOFAIL(strndup(p + 1, strlen(p) - 2));
836 char *here = strstr(sym, bare);
843 else if (*p == '*') {
844 if (strrcmp(sym, p + 1) == 0)
848 else if (*endp == '*') {
849 if (strncmp(sym, p, strlen(p) - 1) == 0)
854 if (strcmp(p, sym) == 0)
862 /* sections that we do not want to do full section mismatch check on */
863 static const char *const section_white_list[] =
867 ".cranges", /* sh64 */
868 ".zdebug*", /* Compressed debug sections. */
869 ".GCC.command.line", /* record-gcc-switches */
870 ".mdebug*", /* alpha, score, mips etc. */
871 ".pdr", /* alpha, score, mips etc. */
876 ".xt.prop", /* xtensa */
877 ".xt.lit", /* xtensa */
878 ".arcextmap*", /* arc */
879 ".gnu.linkonce.arcext*", /* arc : modules */
880 ".cmem*", /* EZchip */
881 ".fmt_slot*", /* EZchip */
888 * This is used to find sections missing the SHF_ALLOC flag.
889 * The cause of this is often a section specified in assembler
890 * without "ax" / "aw".
892 static void check_section(const char *modname, struct elf_info *elf,
895 const char *sec = sech_name(elf, sechdr);
897 if (sechdr->sh_type == SHT_PROGBITS &&
898 !(sechdr->sh_flags & SHF_ALLOC) &&
899 !match(sec, section_white_list)) {
900 warn("%s (%s): unexpected non-allocatable section.\n"
901 "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
902 "Note that for example <linux/init.h> contains\n"
903 "section definitions for use in .S files.\n\n",
910 #define ALL_INIT_DATA_SECTIONS \
911 ".init.setup", ".init.rodata", ".meminit.rodata", \
912 ".init.data", ".meminit.data"
913 #define ALL_EXIT_DATA_SECTIONS \
914 ".exit.data", ".memexit.data"
916 #define ALL_INIT_TEXT_SECTIONS \
917 ".init.text", ".meminit.text"
918 #define ALL_EXIT_TEXT_SECTIONS \
919 ".exit.text", ".memexit.text"
921 #define ALL_PCI_INIT_SECTIONS \
922 ".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
923 ".pci_fixup_enable", ".pci_fixup_resume", \
924 ".pci_fixup_resume_early", ".pci_fixup_suspend"
926 #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
927 #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
929 #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
930 #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
932 #define DATA_SECTIONS ".data", ".data.rel"
933 #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
934 ".kprobes.text", ".cpuidle.text", ".noinstr.text"
935 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
936 ".fixup", ".entry.text", ".exception.text", ".text.*", \
937 ".coldtext", ".softirqentry.text"
939 #define INIT_SECTIONS ".init.*"
940 #define MEM_INIT_SECTIONS ".meminit.*"
942 #define EXIT_SECTIONS ".exit.*"
943 #define MEM_EXIT_SECTIONS ".memexit.*"
945 #define ALL_TEXT_SECTIONS ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
946 TEXT_SECTIONS, OTHER_TEXT_SECTIONS
948 /* init data sections */
949 static const char *const init_data_sections[] =
950 { ALL_INIT_DATA_SECTIONS, NULL };
952 /* all init sections */
953 static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
955 /* All init and exit sections (code + data) */
956 static const char *const init_exit_sections[] =
957 {ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL };
959 /* all text sections */
960 static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
963 static const char *const data_sections[] = { DATA_SECTIONS, NULL };
966 /* symbols in .data that may refer to init/exit sections */
967 #define DEFAULT_SYMBOL_WHITE_LIST \
969 "*_template", /* scsi uses *_template a lot */ \
970 "*_timer", /* arm uses ops structures named _timer a lot */ \
971 "*_sht", /* scsi also used *_sht to some extent */ \
977 static const char *const head_sections[] = { ".head.text*", NULL };
978 static const char *const linker_symbols[] =
979 { "__init_begin", "_sinittext", "_einittext", NULL };
980 static const char *const optim_symbols[] = { "*.constprop.*", NULL };
987 XXXINIT_TO_SOME_INIT,
988 XXXEXIT_TO_SOME_EXIT,
989 ANY_INIT_TO_ANY_EXIT,
990 ANY_EXIT_TO_ANY_INIT,
996 * Describe how to match sections on different criteria:
998 * @fromsec: Array of sections to be matched.
1000 * @bad_tosec: Relocations applied to a section in @fromsec to a section in
1001 * this array is forbidden (black-list). Can be empty.
1003 * @good_tosec: Relocations applied to a section in @fromsec must be
1004 * targeting sections in this array (white-list). Can be empty.
1006 * @mismatch: Type of mismatch.
1008 * @symbol_white_list: Do not match a relocation to a symbol in this list
1009 * even if it is targeting a section in @bad_to_sec.
1011 * @handler: Specific handler to call when a match is found. If NULL,
1012 * default_mismatch_handler() will be called.
1015 struct sectioncheck {
1016 const char *fromsec[20];
1017 const char *bad_tosec[20];
1018 const char *good_tosec[20];
1019 enum mismatch mismatch;
1020 const char *symbol_white_list[20];
1021 void (*handler)(const char *modname, struct elf_info *elf,
1022 const struct sectioncheck* const mismatch,
1023 Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
1027 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
1028 const struct sectioncheck* const mismatch,
1029 Elf_Rela *r, Elf_Sym *sym,
1030 const char *fromsec);
1032 static const struct sectioncheck sectioncheck[] = {
1033 /* Do not reference init/exit code/data from
1034 * normal code and data
1037 .fromsec = { TEXT_SECTIONS, NULL },
1038 .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1039 .mismatch = TEXT_TO_ANY_INIT,
1040 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1043 .fromsec = { DATA_SECTIONS, NULL },
1044 .bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
1045 .mismatch = DATA_TO_ANY_INIT,
1046 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1049 .fromsec = { DATA_SECTIONS, NULL },
1050 .bad_tosec = { INIT_SECTIONS, NULL },
1051 .mismatch = DATA_TO_ANY_INIT,
1052 .symbol_white_list = {
1053 "*_template", "*_timer", "*_sht", "*_ops",
1054 "*_probe", "*_probe_one", "*_console", NULL
1058 .fromsec = { TEXT_SECTIONS, NULL },
1059 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1060 .mismatch = TEXT_TO_ANY_EXIT,
1061 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1064 .fromsec = { DATA_SECTIONS, NULL },
1065 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1066 .mismatch = DATA_TO_ANY_EXIT,
1067 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1069 /* Do not reference init code/data from meminit code/data */
1071 .fromsec = { ALL_XXXINIT_SECTIONS, NULL },
1072 .bad_tosec = { INIT_SECTIONS, NULL },
1073 .mismatch = XXXINIT_TO_SOME_INIT,
1074 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1076 /* Do not reference exit code/data from memexit code/data */
1078 .fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
1079 .bad_tosec = { EXIT_SECTIONS, NULL },
1080 .mismatch = XXXEXIT_TO_SOME_EXIT,
1081 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1083 /* Do not use exit code/data from init code */
1085 .fromsec = { ALL_INIT_SECTIONS, NULL },
1086 .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1087 .mismatch = ANY_INIT_TO_ANY_EXIT,
1088 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1090 /* Do not use init code/data from exit code */
1092 .fromsec = { ALL_EXIT_SECTIONS, NULL },
1093 .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1094 .mismatch = ANY_EXIT_TO_ANY_INIT,
1095 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1098 .fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
1099 .bad_tosec = { INIT_SECTIONS, NULL },
1100 .mismatch = ANY_INIT_TO_ANY_EXIT,
1101 .symbol_white_list = { NULL },
1103 /* Do not export init/exit functions or data */
1105 .fromsec = { "__ksymtab*", NULL },
1106 .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
1107 .mismatch = EXPORT_TO_INIT_EXIT,
1108 .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1111 .fromsec = { "__ex_table", NULL },
1112 /* If you're adding any new black-listed sections in here, consider
1113 * adding a special 'printer' for them in scripts/check_extable.
1115 .bad_tosec = { ".altinstr_replacement", NULL },
1116 .good_tosec = {ALL_TEXT_SECTIONS , NULL},
1117 .mismatch = EXTABLE_TO_NON_TEXT,
1118 .handler = extable_mismatch_handler,
1122 static const struct sectioncheck *section_mismatch(
1123 const char *fromsec, const char *tosec)
1126 int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
1127 const struct sectioncheck *check = §ioncheck[0];
1130 * The target section could be the SHT_NUL section when we're
1131 * handling relocations to un-resolved symbols, trying to match it
1132 * doesn't make much sense and causes build failures on parisc
1138 for (i = 0; i < elems; i++) {
1139 if (match(fromsec, check->fromsec)) {
1140 if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1142 if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1151 * Whitelist to allow certain references to pass with no warning.
1154 * If a module parameter is declared __initdata and permissions=0
1155 * then this is legal despite the warning generated.
1156 * We cannot see value of permissions here, so just ignore
1158 * The pattern is identified by:
1159 * tosec = .init.data
1164 * module_param_call() ops can refer to __init set function if permissions=0
1165 * The pattern is identified by:
1166 * tosec = .init.text
1168 * atsym = __param_ops_*
1171 * Many drivers utilise a *driver container with references to
1172 * add, remove, probe functions etc.
1173 * the pattern is identified by:
1174 * tosec = init or exit section
1175 * fromsec = data section
1176 * atsym = *driver, *_template, *_sht, *_ops, *_probe,
1177 * *probe_one, *_console, *_timer
1180 * Whitelist all references from .head.text to any init section
1183 * Some symbols belong to init section but still it is ok to reference
1184 * these from non-init sections as these symbols don't have any memory
1185 * allocated for them and symbol address and value are same. So even
1186 * if init section is freed, its ok to reference those symbols.
1187 * For ex. symbols marking the init section boundaries.
1188 * This pattern is identified by
1189 * refsymname = __init_begin, _sinittext, _einittext
1192 * GCC may optimize static inlines when fed constant arg(s) resulting
1193 * in functions like cpumask_empty() -- generating an associated symbol
1194 * cpumask_empty.constprop.3 that appears in the audit. If the const that
1195 * is passed in comes from __init, like say nmi_ipi_mask, we get a
1196 * meaningless section warning. May need to add isra symbols too...
1197 * This pattern is identified by
1198 * tosec = init section
1199 * fromsec = text section
1200 * refsymname = *.constprop.*
1203 * Hide section mismatch warnings for ELF local symbols. The goal
1204 * is to eliminate false positive modpost warnings caused by
1205 * compiler-generated ELF local symbol names such as ".LANCHOR1".
1206 * Autogenerated symbol names bypass modpost's "Pattern 2"
1207 * whitelisting, which relies on pattern-matching against symbol
1208 * names to work. (One situation where gcc can autogenerate ELF
1209 * local symbols is when "-fsection-anchors" is used.)
1211 static int secref_whitelist(const struct sectioncheck *mismatch,
1212 const char *fromsec, const char *fromsym,
1213 const char *tosec, const char *tosym)
1215 /* Check for pattern 1 */
1216 if (match(tosec, init_data_sections) &&
1217 match(fromsec, data_sections) &&
1218 strstarts(fromsym, "__param"))
1221 /* Check for pattern 1a */
1222 if (strcmp(tosec, ".init.text") == 0 &&
1223 match(fromsec, data_sections) &&
1224 strstarts(fromsym, "__param_ops_"))
1227 /* Check for pattern 2 */
1228 if (match(tosec, init_exit_sections) &&
1229 match(fromsec, data_sections) &&
1230 match(fromsym, mismatch->symbol_white_list))
1233 /* Check for pattern 3 */
1234 if (match(fromsec, head_sections) &&
1235 match(tosec, init_sections))
1238 /* Check for pattern 4 */
1239 if (match(tosym, linker_symbols))
1242 /* Check for pattern 5 */
1243 if (match(fromsec, text_sections) &&
1244 match(tosec, init_sections) &&
1245 match(fromsym, optim_symbols))
1248 /* Check for pattern 6 */
1249 if (strstarts(fromsym, ".L"))
1255 static inline int is_arm_mapping_symbol(const char *str)
1257 return str[0] == '$' && strchr("axtd", str[1])
1258 && (str[2] == '\0' || str[2] == '.');
1262 * If there's no name there, ignore it; likewise, ignore it if it's
1263 * one of the magic symbols emitted used by current ARM tools.
1265 * Otherwise if find_symbols_between() returns those symbols, they'll
1266 * fail the whitelist tests and cause lots of false alarms ... fixable
1267 * only by merging __exit and __init sections into __text, bloating
1268 * the kernel (which is especially evil on embedded platforms).
1270 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1272 const char *name = elf->strtab + sym->st_name;
1274 if (!name || !strlen(name))
1276 return !is_arm_mapping_symbol(name);
1280 * Find symbol based on relocation record info.
1281 * In some cases the symbol supplied is a valid symbol so
1282 * return refsym. If st_name != 0 we assume this is a valid symbol.
1283 * In other cases the symbol needs to be looked up in the symbol table
1284 * based on section and address.
1286 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1290 Elf_Sym *near = NULL;
1291 Elf64_Sword distance = 20;
1293 unsigned int relsym_secindex;
1295 if (relsym->st_name != 0)
1298 relsym_secindex = get_secindex(elf, relsym);
1299 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1300 if (get_secindex(elf, sym) != relsym_secindex)
1302 if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1304 if (!is_valid_name(elf, sym))
1306 if (sym->st_value == addr)
1308 /* Find a symbol nearby - addr are maybe negative */
1309 d = sym->st_value - addr;
1311 d = addr - sym->st_value;
1317 /* We need a close match */
1325 * Find symbols before or equal addr and after addr - in the section sec.
1326 * If we find two symbols with equal offset prefer one with a valid name.
1327 * The ELF format may have a better way to detect what type of symbol
1328 * it is, but this works for now.
1330 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1334 Elf_Sym *near = NULL;
1335 Elf_Addr distance = ~0;
1337 for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1340 if (is_shndx_special(sym->st_shndx))
1342 symsec = sec_name(elf, get_secindex(elf, sym));
1343 if (strcmp(symsec, sec) != 0)
1345 if (!is_valid_name(elf, sym))
1347 if (sym->st_value <= addr) {
1348 if ((addr - sym->st_value) < distance) {
1349 distance = addr - sym->st_value;
1351 } else if ((addr - sym->st_value) == distance) {
1360 * Convert a section name to the function/data attribute
1361 * .init.text => __init
1362 * .memexitconst => __memconst
1365 * The memory of returned value has been allocated on a heap. The user of this
1366 * method should free it after usage.
1368 static char *sec2annotation(const char *s)
1370 if (match(s, init_exit_sections)) {
1371 char *p = NOFAIL(malloc(20));
1378 while (*s && *s != '.')
1383 if (strstr(s, "rodata") != NULL)
1384 strcat(p, "const ");
1385 else if (strstr(s, "data") != NULL)
1391 return NOFAIL(strdup(""));
1395 static int is_function(Elf_Sym *sym)
1398 return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1403 static void print_section_list(const char * const list[20])
1405 const char *const *s = list;
1408 fprintf(stderr, "%s", *s);
1411 fprintf(stderr, ", ");
1413 fprintf(stderr, "\n");
1416 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1419 case 0: *name = "variable"; *name_p = ""; break;
1420 case 1: *name = "function"; *name_p = "()"; break;
1421 default: *name = "(unknown reference)"; *name_p = ""; break;
1426 * Print a warning about a section mismatch.
1427 * Try to find symbols near it so user can find it.
1428 * Check whitelist before warning - it may be a false positive.
1430 static void report_sec_mismatch(const char *modname,
1431 const struct sectioncheck *mismatch,
1432 const char *fromsec,
1433 unsigned long long fromaddr,
1434 const char *fromsym,
1436 const char *tosec, const char *tosym,
1439 const char *from, *from_p;
1440 const char *to, *to_p;
1444 sec_mismatch_count++;
1446 get_pretty_name(from_is_func, &from, &from_p);
1447 get_pretty_name(to_is_func, &to, &to_p);
1449 warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s "
1450 "to the %s %s:%s%s\n",
1451 modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1454 switch (mismatch->mismatch) {
1455 case TEXT_TO_ANY_INIT:
1456 prl_from = sec2annotation(fromsec);
1457 prl_to = sec2annotation(tosec);
1459 "The function %s%s() references\n"
1461 "This is often because %s lacks a %s\n"
1462 "annotation or the annotation of %s is wrong.\n",
1464 to, prl_to, tosym, to_p,
1465 fromsym, prl_to, tosym);
1469 case DATA_TO_ANY_INIT: {
1470 prl_to = sec2annotation(tosec);
1472 "The variable %s references\n"
1474 "If the reference is valid then annotate the\n"
1475 "variable with __init* or __refdata (see linux/init.h) "
1476 "or name the variable:\n",
1477 fromsym, to, prl_to, tosym, to_p);
1478 print_section_list(mismatch->symbol_white_list);
1482 case TEXT_TO_ANY_EXIT:
1483 prl_to = sec2annotation(tosec);
1485 "The function %s() references a %s in an exit section.\n"
1486 "Often the %s %s%s has valid usage outside the exit section\n"
1487 "and the fix is to remove the %sannotation of %s.\n",
1488 fromsym, to, to, tosym, to_p, prl_to, tosym);
1491 case DATA_TO_ANY_EXIT: {
1492 prl_to = sec2annotation(tosec);
1494 "The variable %s references\n"
1496 "If the reference is valid then annotate the\n"
1497 "variable with __exit* (see linux/init.h) or "
1498 "name the variable:\n",
1499 fromsym, to, prl_to, tosym, to_p);
1500 print_section_list(mismatch->symbol_white_list);
1504 case XXXINIT_TO_SOME_INIT:
1505 case XXXEXIT_TO_SOME_EXIT:
1506 prl_from = sec2annotation(fromsec);
1507 prl_to = sec2annotation(tosec);
1509 "The %s %s%s%s references\n"
1511 "If %s is only used by %s then\n"
1512 "annotate %s with a matching annotation.\n",
1513 from, prl_from, fromsym, from_p,
1514 to, prl_to, tosym, to_p,
1515 tosym, fromsym, tosym);
1519 case ANY_INIT_TO_ANY_EXIT:
1520 prl_from = sec2annotation(fromsec);
1521 prl_to = sec2annotation(tosec);
1523 "The %s %s%s%s references\n"
1525 "This is often seen when error handling "
1526 "in the init function\n"
1527 "uses functionality in the exit path.\n"
1528 "The fix is often to remove the %sannotation of\n"
1529 "%s%s so it may be used outside an exit section.\n",
1530 from, prl_from, fromsym, from_p,
1531 to, prl_to, tosym, to_p,
1532 prl_to, tosym, to_p);
1536 case ANY_EXIT_TO_ANY_INIT:
1537 prl_from = sec2annotation(fromsec);
1538 prl_to = sec2annotation(tosec);
1540 "The %s %s%s%s references\n"
1542 "This is often seen when error handling "
1543 "in the exit function\n"
1544 "uses functionality in the init path.\n"
1545 "The fix is often to remove the %sannotation of\n"
1546 "%s%s so it may be used outside an init section.\n",
1547 from, prl_from, fromsym, from_p,
1548 to, prl_to, tosym, to_p,
1549 prl_to, tosym, to_p);
1553 case EXPORT_TO_INIT_EXIT:
1554 prl_to = sec2annotation(tosec);
1556 "The symbol %s is exported and annotated %s\n"
1557 "Fix this by removing the %sannotation of %s "
1558 "or drop the export.\n",
1559 tosym, prl_to, prl_to, tosym);
1562 case EXTABLE_TO_NON_TEXT:
1563 fatal("There's a special handler for this mismatch type, "
1564 "we should never get here.");
1567 fprintf(stderr, "\n");
1570 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1571 const struct sectioncheck* const mismatch,
1572 Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1578 const char *fromsym;
1580 from = find_elf_symbol2(elf, r->r_offset, fromsec);
1581 fromsym = sym_name(elf, from);
1583 if (strstarts(fromsym, "reference___initcall"))
1586 tosec = sec_name(elf, get_secindex(elf, sym));
1587 to = find_elf_symbol(elf, r->r_addend, sym);
1588 tosym = sym_name(elf, to);
1590 /* check whitelist - we may ignore it */
1591 if (secref_whitelist(mismatch,
1592 fromsec, fromsym, tosec, tosym)) {
1593 report_sec_mismatch(modname, mismatch,
1594 fromsec, r->r_offset, fromsym,
1595 is_function(from), tosec, tosym,
1600 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1602 if (section_index > elf->num_sections)
1603 fatal("section_index is outside elf->num_sections!\n");
1605 return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1609 * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1610 * to know the sizeof(struct exception_table_entry) for the target architecture.
1612 static unsigned int extable_entry_size = 0;
1613 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1616 * If we're currently checking the second relocation within __ex_table,
1617 * that relocation offset tells us the offsetof(struct
1618 * exception_table_entry, fixup) which is equal to sizeof(struct
1619 * exception_table_entry) divided by two. We use that to our advantage
1620 * since there's no portable way to get that size as every architecture
1621 * seems to go with different sized types. Not pretty but better than
1622 * hard-coding the size for every architecture..
1624 if (!extable_entry_size)
1625 extable_entry_size = r->r_offset * 2;
1628 static inline bool is_extable_fault_address(Elf_Rela *r)
1631 * extable_entry_size is only discovered after we've handled the
1632 * _second_ relocation in __ex_table, so only abort when we're not
1633 * handling the first reloc and extable_entry_size is zero.
1635 if (r->r_offset && extable_entry_size == 0)
1636 fatal("extable_entry size hasn't been discovered!\n");
1638 return ((r->r_offset == 0) ||
1639 (r->r_offset % extable_entry_size == 0));
1642 #define is_second_extable_reloc(Start, Cur, Sec) \
1643 (((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1645 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1646 const struct sectioncheck* const mismatch,
1647 Elf_Rela* r, Elf_Sym* sym,
1648 const char* fromsec, const char* tosec)
1650 Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1651 const char* fromsym_name = sym_name(elf, fromsym);
1652 Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1653 const char* tosym_name = sym_name(elf, tosym);
1654 const char* from_pretty_name;
1655 const char* from_pretty_name_p;
1656 const char* to_pretty_name;
1657 const char* to_pretty_name_p;
1659 get_pretty_name(is_function(fromsym),
1660 &from_pretty_name, &from_pretty_name_p);
1661 get_pretty_name(is_function(tosym),
1662 &to_pretty_name, &to_pretty_name_p);
1664 warn("%s(%s+0x%lx): Section mismatch in reference"
1665 " from the %s %s%s to the %s %s:%s%s\n",
1666 modname, fromsec, (long)r->r_offset, from_pretty_name,
1667 fromsym_name, from_pretty_name_p,
1668 to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1670 if (!match(tosec, mismatch->bad_tosec) &&
1671 is_executable_section(elf, get_secindex(elf, sym)))
1673 "The relocation at %s+0x%lx references\n"
1674 "section \"%s\" which is not in the list of\n"
1675 "authorized sections. If you're adding a new section\n"
1676 "and/or if this reference is valid, add \"%s\" to the\n"
1677 "list of authorized sections to jump to on fault.\n"
1678 "This can be achieved by adding \"%s\" to \n"
1679 "OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1680 fromsec, (long)r->r_offset, tosec, tosec, tosec);
1683 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1684 const struct sectioncheck* const mismatch,
1685 Elf_Rela* r, Elf_Sym* sym,
1686 const char *fromsec)
1688 const char* tosec = sec_name(elf, get_secindex(elf, sym));
1690 sec_mismatch_count++;
1692 report_extable_warnings(modname, elf, mismatch, r, sym, fromsec, tosec);
1694 if (match(tosec, mismatch->bad_tosec))
1695 fatal("The relocation at %s+0x%lx references\n"
1696 "section \"%s\" which is black-listed.\n"
1697 "Something is seriously wrong and should be fixed.\n"
1698 "You might get more information about where this is\n"
1699 "coming from by using scripts/check_extable.sh %s\n",
1700 fromsec, (long)r->r_offset, tosec, modname);
1701 else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1702 if (is_extable_fault_address(r))
1703 fatal("The relocation at %s+0x%lx references\n"
1704 "section \"%s\" which is not executable, IOW\n"
1705 "it is not possible for the kernel to fault\n"
1706 "at that address. Something is seriously wrong\n"
1707 "and should be fixed.\n",
1708 fromsec, (long)r->r_offset, tosec);
1710 fatal("The relocation at %s+0x%lx references\n"
1711 "section \"%s\" which is not executable, IOW\n"
1712 "the kernel will fault if it ever tries to\n"
1713 "jump to it. Something is seriously wrong\n"
1714 "and should be fixed.\n",
1715 fromsec, (long)r->r_offset, tosec);
1719 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1720 Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1722 const char *tosec = sec_name(elf, get_secindex(elf, sym));
1723 const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1726 if (mismatch->handler)
1727 mismatch->handler(modname, elf, mismatch,
1730 default_mismatch_handler(modname, elf, mismatch,
1735 static unsigned int *reloc_location(struct elf_info *elf,
1736 Elf_Shdr *sechdr, Elf_Rela *r)
1738 return sym_get_data_by_offset(elf, sechdr->sh_info, r->r_offset);
1741 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1743 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1744 unsigned int *location = reloc_location(elf, sechdr, r);
1748 r->r_addend = TO_NATIVE(*location);
1751 r->r_addend = TO_NATIVE(*location) + 4;
1752 /* For CONFIG_RELOCATABLE=y */
1753 if (elf->hdr->e_type == ET_EXEC)
1754 r->r_addend += r->r_offset;
1761 #define R_ARM_CALL 28
1763 #ifndef R_ARM_JUMP24
1764 #define R_ARM_JUMP24 29
1767 #ifndef R_ARM_THM_CALL
1768 #define R_ARM_THM_CALL 10
1770 #ifndef R_ARM_THM_JUMP24
1771 #define R_ARM_THM_JUMP24 30
1773 #ifndef R_ARM_THM_JUMP19
1774 #define R_ARM_THM_JUMP19 51
1777 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1779 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1783 /* From ARM ABI: (S + A) | T */
1784 r->r_addend = (int)(long)
1785 (elf->symtab_start + ELF_R_SYM(r->r_info));
1790 case R_ARM_THM_CALL:
1791 case R_ARM_THM_JUMP24:
1792 case R_ARM_THM_JUMP19:
1793 /* From ARM ABI: ((S + A) | T) - P */
1794 r->r_addend = (int)(long)(elf->hdr +
1796 (r->r_offset - sechdr->sh_addr));
1804 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1806 unsigned int r_typ = ELF_R_TYPE(r->r_info);
1807 unsigned int *location = reloc_location(elf, sechdr, r);
1810 if (r_typ == R_MIPS_HI16)
1811 return 1; /* skip this */
1812 inst = TO_NATIVE(*location);
1815 r->r_addend = inst & 0xffff;
1818 r->r_addend = (inst & 0x03ffffff) << 2;
1828 #define EM_RISCV 243
1831 #ifndef R_RISCV_SUB32
1832 #define R_RISCV_SUB32 39
1835 static void section_rela(const char *modname, struct elf_info *elf,
1842 const char *fromsec;
1844 Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1845 Elf_Rela *stop = (void *)start + sechdr->sh_size;
1847 fromsec = sech_name(elf, sechdr);
1848 fromsec += strlen(".rela");
1849 /* if from section (name) is know good then skip it */
1850 if (match(fromsec, section_white_list))
1853 for (rela = start; rela < stop; rela++) {
1854 r.r_offset = TO_NATIVE(rela->r_offset);
1855 #if KERNEL_ELFCLASS == ELFCLASS64
1856 if (elf->hdr->e_machine == EM_MIPS) {
1858 r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1859 r_sym = TO_NATIVE(r_sym);
1860 r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1861 r.r_info = ELF64_R_INFO(r_sym, r_typ);
1863 r.r_info = TO_NATIVE(rela->r_info);
1864 r_sym = ELF_R_SYM(r.r_info);
1867 r.r_info = TO_NATIVE(rela->r_info);
1868 r_sym = ELF_R_SYM(r.r_info);
1870 r.r_addend = TO_NATIVE(rela->r_addend);
1871 switch (elf->hdr->e_machine) {
1873 if (!strcmp("__ex_table", fromsec) &&
1874 ELF_R_TYPE(r.r_info) == R_RISCV_SUB32)
1878 sym = elf->symtab_start + r_sym;
1879 /* Skip special sections */
1880 if (is_shndx_special(sym->st_shndx))
1882 if (is_second_extable_reloc(start, rela, fromsec))
1883 find_extable_entry_size(fromsec, &r);
1884 check_section_mismatch(modname, elf, &r, sym, fromsec);
1888 static void section_rel(const char *modname, struct elf_info *elf,
1895 const char *fromsec;
1897 Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1898 Elf_Rel *stop = (void *)start + sechdr->sh_size;
1900 fromsec = sech_name(elf, sechdr);
1901 fromsec += strlen(".rel");
1902 /* if from section (name) is know good then skip it */
1903 if (match(fromsec, section_white_list))
1906 for (rel = start; rel < stop; rel++) {
1907 r.r_offset = TO_NATIVE(rel->r_offset);
1908 #if KERNEL_ELFCLASS == ELFCLASS64
1909 if (elf->hdr->e_machine == EM_MIPS) {
1911 r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1912 r_sym = TO_NATIVE(r_sym);
1913 r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1914 r.r_info = ELF64_R_INFO(r_sym, r_typ);
1916 r.r_info = TO_NATIVE(rel->r_info);
1917 r_sym = ELF_R_SYM(r.r_info);
1920 r.r_info = TO_NATIVE(rel->r_info);
1921 r_sym = ELF_R_SYM(r.r_info);
1924 switch (elf->hdr->e_machine) {
1926 if (addend_386_rel(elf, sechdr, &r))
1930 if (addend_arm_rel(elf, sechdr, &r))
1934 if (addend_mips_rel(elf, sechdr, &r))
1938 sym = elf->symtab_start + r_sym;
1939 /* Skip special sections */
1940 if (is_shndx_special(sym->st_shndx))
1942 if (is_second_extable_reloc(start, rel, fromsec))
1943 find_extable_entry_size(fromsec, &r);
1944 check_section_mismatch(modname, elf, &r, sym, fromsec);
1949 * A module includes a number of sections that are discarded
1950 * either when loaded or when used as built-in.
1951 * For loaded modules all functions marked __init and all data
1952 * marked __initdata will be discarded when the module has been initialized.
1953 * Likewise for modules used built-in the sections marked __exit
1954 * are discarded because __exit marked function are supposed to be called
1955 * only when a module is unloaded which never happens for built-in modules.
1956 * The check_sec_ref() function traverses all relocation records
1957 * to find all references to a section that reference a section that will
1958 * be discarded and warns about it.
1960 static void check_sec_ref(struct module *mod, const char *modname,
1961 struct elf_info *elf)
1964 Elf_Shdr *sechdrs = elf->sechdrs;
1966 /* Walk through all sections */
1967 for (i = 0; i < elf->num_sections; i++) {
1968 check_section(modname, elf, &elf->sechdrs[i]);
1969 /* We want to process only relocation sections and not .init */
1970 if (sechdrs[i].sh_type == SHT_RELA)
1971 section_rela(modname, elf, &elf->sechdrs[i]);
1972 else if (sechdrs[i].sh_type == SHT_REL)
1973 section_rel(modname, elf, &elf->sechdrs[i]);
1977 static char *remove_dot(char *s)
1979 size_t n = strcspn(s, ".");
1982 size_t m = strspn(s + n + 1, "0123456789");
1983 if (m && (s[n + m] == '.' || s[n + m] == 0))
1986 /* strip trailing .prelink */
1987 if (strends(s, ".prelink"))
1988 s[strlen(s) - 8] = '\0';
1993 static void read_symbols(const char *modname)
1995 const char *symname;
2000 struct elf_info info = { };
2003 if (!parse_elf(&info, modname))
2009 /* strip trailing .o */
2010 tmp = NOFAIL(strdup(modname));
2011 tmp[strlen(tmp) - 2] = '\0';
2012 /* strip trailing .prelink */
2013 if (strends(tmp, ".prelink"))
2014 tmp[strlen(tmp) - 8] = '\0';
2015 mod = new_module(tmp);
2019 if (!mod->is_vmlinux) {
2020 license = get_modinfo(&info, "license");
2022 error("missing MODULE_LICENSE() in %s\n", modname);
2024 if (!license_is_gpl_compatible(license)) {
2025 mod->is_gpl_compatible = false;
2028 license = get_next_modinfo(&info, "license", license);
2031 namespace = get_modinfo(&info, "import_ns");
2033 add_namespace(&mod->imported_namespaces, namespace);
2034 namespace = get_next_modinfo(&info, "import_ns",
2039 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2040 symname = remove_dot(info.strtab + sym->st_name);
2042 handle_symbol(mod, &info, sym, symname);
2043 handle_moddevtable(mod, &info, sym, symname);
2046 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2047 symname = remove_dot(info.strtab + sym->st_name);
2049 /* Apply symbol namespaces from __kstrtabns_<symbol> entries. */
2050 if (strstarts(symname, "__kstrtabns_"))
2051 sym_update_namespace(symname + strlen("__kstrtabns_"),
2052 sym_get_data(&info, sym));
2053 if (strstarts(symname, "__crc_"))
2054 handle_modversion(mod, &info, sym,
2055 symname + strlen("__crc_"));
2058 // check for static EXPORT_SYMBOL_* functions && global vars
2059 for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
2060 unsigned char bind = ELF_ST_BIND(sym->st_info);
2062 if (bind == STB_GLOBAL || bind == STB_WEAK) {
2064 find_symbol(remove_dot(info.strtab +
2068 s->is_static = false;
2072 check_sec_ref(mod, modname, &info);
2074 if (!mod->is_vmlinux) {
2075 version = get_modinfo(&info, "version");
2076 if (version || all_versions)
2077 get_src_version(mod->name, mod->srcversion,
2078 sizeof(mod->srcversion) - 1);
2081 parse_elf_finish(&info);
2083 /* Our trick to get versioning for module struct etc. - it's
2084 * never passed as an argument to an exported function, so
2085 * the automatic versioning doesn't pick it up, but it's really
2086 * important anyhow */
2088 sym_add_unresolved("module_layout", mod, false);
2091 static void read_symbols_from_files(const char *filename)
2094 char fname[PATH_MAX];
2096 if (strcmp(filename, "-") != 0) {
2097 in = fopen(filename, "r");
2099 fatal("Can't open filenames file %s: %m", filename);
2102 while (fgets(fname, PATH_MAX, in) != NULL) {
2103 if (strends(fname, "\n"))
2104 fname[strlen(fname)-1] = '\0';
2105 read_symbols(fname);
2114 /* We first write the generated file into memory using the
2115 * following helper, then compare to the file on disk and
2116 * only update the later if anything changed */
2118 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2119 const char *fmt, ...)
2126 len = vsnprintf(tmp, SZ, fmt, ap);
2127 buf_write(buf, tmp, len);
2131 void buf_write(struct buffer *buf, const char *s, int len)
2133 if (buf->size - buf->pos < len) {
2134 buf->size += len + SZ;
2135 buf->p = NOFAIL(realloc(buf->p, buf->size));
2137 strncpy(buf->p + buf->pos, s, len);
2141 static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2145 error("GPL-incompatible module %s.ko uses GPL-only symbol '%s'\n",
2149 case export_unknown:
2155 static void check_exports(struct module *mod)
2157 struct symbol *s, *exp;
2159 for (s = mod->unres; s; s = s->next) {
2160 const char *basename;
2161 exp = find_symbol(s->name);
2163 if (!s->weak && nr_unresolved++ < MAX_UNRESOLVED_REPORTS)
2164 modpost_log(warn_unresolved ? LOG_WARN : LOG_ERROR,
2165 "\"%s\" [%s.ko] undefined!\n",
2166 s->name, mod->name);
2169 if (exp->module == mod) {
2170 error("\"%s\" [%s.ko] was exported without definition\n",
2171 s->name, mod->name);
2175 s->module = exp->module;
2176 s->crc_valid = exp->crc_valid;
2179 basename = strrchr(mod->name, '/');
2183 basename = mod->name;
2185 if (exp->namespace &&
2186 !module_imports_namespace(mod, exp->namespace)) {
2187 modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
2188 "module %s uses symbol %s from namespace %s, but does not import it.\n",
2189 basename, exp->name, exp->namespace);
2190 add_namespace(&mod->missing_namespaces, exp->namespace);
2193 if (!mod->is_gpl_compatible)
2194 check_for_gpl_usage(exp->export, basename, exp->name);
2198 static void check_modname_len(struct module *mod)
2200 const char *mod_name;
2202 mod_name = strrchr(mod->name, '/');
2203 if (mod_name == NULL)
2204 mod_name = mod->name;
2207 if (strlen(mod_name) >= MODULE_NAME_LEN)
2208 error("module name is too long [%s.ko]\n", mod->name);
2212 * Header for the generated file
2214 static void add_header(struct buffer *b, struct module *mod)
2216 buf_printf(b, "#include <linux/module.h>\n");
2218 * Include build-salt.h after module.h in order to
2219 * inherit the definitions.
2221 buf_printf(b, "#define INCLUDE_VERMAGIC\n");
2222 buf_printf(b, "#include <linux/build-salt.h>\n");
2223 buf_printf(b, "#include <linux/elfnote-lto.h>\n");
2224 buf_printf(b, "#include <linux/vermagic.h>\n");
2225 buf_printf(b, "#include <linux/compiler.h>\n");
2226 buf_printf(b, "\n");
2227 buf_printf(b, "BUILD_SALT;\n");
2228 buf_printf(b, "BUILD_LTO_INFO;\n");
2229 buf_printf(b, "\n");
2230 buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2231 buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
2232 buf_printf(b, "\n");
2233 buf_printf(b, "__visible struct module __this_module\n");
2234 buf_printf(b, "__section(\".gnu.linkonce.this_module\") = {\n");
2235 buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2237 buf_printf(b, "\t.init = init_module,\n");
2238 if (mod->has_cleanup)
2239 buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2240 "\t.exit = cleanup_module,\n"
2242 buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2243 buf_printf(b, "};\n");
2246 static void add_intree_flag(struct buffer *b, int is_intree)
2249 buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2252 /* Cannot check for assembler */
2253 static void add_retpoline(struct buffer *b)
2255 buf_printf(b, "\n#ifdef CONFIG_RETPOLINE\n");
2256 buf_printf(b, "MODULE_INFO(retpoline, \"Y\");\n");
2257 buf_printf(b, "#endif\n");
2260 static void add_staging_flag(struct buffer *b, const char *name)
2262 if (strstarts(name, "drivers/staging"))
2263 buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2267 * Record CRCs for unresolved symbols
2269 static void add_versions(struct buffer *b, struct module *mod)
2276 buf_printf(b, "\n");
2277 buf_printf(b, "static const struct modversion_info ____versions[]\n");
2278 buf_printf(b, "__used __section(\"__versions\") = {\n");
2280 for (s = mod->unres; s; s = s->next) {
2283 if (!s->crc_valid) {
2284 warn("\"%s\" [%s.ko] has no CRC!\n",
2285 s->name, mod->name);
2288 if (strlen(s->name) >= MODULE_NAME_LEN) {
2289 error("too long symbol \"%s\" [%s.ko]\n",
2290 s->name, mod->name);
2293 buf_printf(b, "\t{ %#8x, \"%s\" },\n",
2297 buf_printf(b, "};\n");
2300 static void add_depends(struct buffer *b, struct module *mod)
2305 /* Clear ->seen flag of modules that own symbols needed by this. */
2306 for (s = mod->unres; s; s = s->next)
2308 s->module->seen = s->module->is_vmlinux;
2310 buf_printf(b, "\n");
2311 buf_printf(b, "MODULE_INFO(depends, \"");
2312 for (s = mod->unres; s; s = s->next) {
2317 if (s->module->seen)
2320 s->module->seen = true;
2321 p = strrchr(s->module->name, '/');
2325 p = s->module->name;
2326 buf_printf(b, "%s%s", first ? "" : ",", p);
2329 buf_printf(b, "\");\n");
2332 static void add_srcversion(struct buffer *b, struct module *mod)
2334 if (mod->srcversion[0]) {
2335 buf_printf(b, "\n");
2336 buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2341 static void write_buf(struct buffer *b, const char *fname)
2348 file = fopen(fname, "w");
2353 if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2357 if (fclose(file) != 0) {
2363 static void write_if_changed(struct buffer *b, const char *fname)
2369 file = fopen(fname, "r");
2373 if (fstat(fileno(file), &st) < 0)
2376 if (st.st_size != b->pos)
2379 tmp = NOFAIL(malloc(b->pos));
2380 if (fread(tmp, 1, b->pos, file) != b->pos)
2383 if (memcmp(tmp, b->p, b->pos) != 0)
2395 write_buf(b, fname);
2398 /* parse Module.symvers file. line format:
2399 * 0x12345678<tab>symbol<tab>module<tab>export<tab>namespace
2401 static void read_dump(const char *fname)
2403 char *buf, *pos, *line;
2405 buf = read_text_file(fname);
2407 /* No symbol versions, silently ignore */
2412 while ((line = get_line(&pos))) {
2413 char *symname, *namespace, *modname, *d, *export;
2418 if (!(symname = strchr(line, '\t')))
2421 if (!(modname = strchr(symname, '\t')))
2424 if (!(export = strchr(modname, '\t')))
2427 if (!(namespace = strchr(export, '\t')))
2429 *namespace++ = '\0';
2431 crc = strtoul(line, &d, 16);
2432 if (*symname == '\0' || *modname == '\0' || *d != '\0')
2434 mod = find_module(modname);
2436 mod = new_module(modname);
2437 mod->from_dump = true;
2439 s = sym_add_exported(symname, mod, export_no(export));
2440 s->is_static = false;
2441 sym_set_crc(symname, crc);
2442 sym_update_namespace(symname, namespace);
2448 fatal("parse error in symbol dump file\n");
2451 static void write_dump(const char *fname)
2453 struct buffer buf = { };
2454 struct symbol *symbol;
2455 const char *namespace;
2458 for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2459 symbol = symbolhash[n];
2461 if (!symbol->module->from_dump) {
2462 namespace = symbol->namespace;
2463 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n",
2464 symbol->crc, symbol->name,
2465 symbol->module->name,
2466 export_str(symbol->export),
2467 namespace ? namespace : "");
2469 symbol = symbol->next;
2472 write_buf(&buf, fname);
2476 static void write_namespace_deps_files(const char *fname)
2479 struct namespace_list *ns;
2480 struct buffer ns_deps_buf = {};
2482 list_for_each_entry(mod, &modules, list) {
2484 if (mod->from_dump || !mod->missing_namespaces)
2487 buf_printf(&ns_deps_buf, "%s.ko:", mod->name);
2489 for (ns = mod->missing_namespaces; ns; ns = ns->next)
2490 buf_printf(&ns_deps_buf, " %s", ns->namespace);
2492 buf_printf(&ns_deps_buf, "\n");
2495 write_if_changed(&ns_deps_buf, fname);
2496 free(ns_deps_buf.p);
2500 struct dump_list *next;
2504 int main(int argc, char **argv)
2507 struct buffer buf = { };
2508 char *missing_namespace_deps = NULL;
2509 char *dump_write = NULL, *files_source = NULL;
2512 struct dump_list *dump_read_start = NULL;
2513 struct dump_list **dump_read_iter = &dump_read_start;
2515 while ((opt = getopt(argc, argv, "ei:mnT:o:awENd:")) != -1) {
2518 external_module = true;
2522 NOFAIL(calloc(1, sizeof(**dump_read_iter)));
2523 (*dump_read_iter)->file = optarg;
2524 dump_read_iter = &(*dump_read_iter)->next;
2530 ignore_missing_files = true;
2533 dump_write = optarg;
2536 all_versions = true;
2539 files_source = optarg;
2542 warn_unresolved = true;
2545 sec_mismatch_warn_only = false;
2548 allow_missing_ns_imports = true;
2551 missing_namespace_deps = optarg;
2558 while (dump_read_start) {
2559 struct dump_list *tmp;
2561 read_dump(dump_read_start->file);
2562 tmp = dump_read_start->next;
2563 free(dump_read_start);
2564 dump_read_start = tmp;
2567 while (optind < argc)
2568 read_symbols(argv[optind++]);
2571 read_symbols_from_files(files_source);
2573 list_for_each_entry(mod, &modules, list) {
2574 char fname[PATH_MAX];
2577 if (mod->is_vmlinux || mod->from_dump)
2582 check_modname_len(mod);
2585 add_header(&buf, mod);
2586 add_intree_flag(&buf, !external_module);
2587 add_retpoline(&buf);
2588 add_staging_flag(&buf, mod->name);
2589 add_versions(&buf, mod);
2590 add_depends(&buf, mod);
2591 add_moddevtable(&buf, mod);
2592 add_srcversion(&buf, mod);
2594 ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
2595 if (ret >= sizeof(fname)) {
2596 error("%s: too long path was truncated\n", fname);
2600 write_if_changed(&buf, fname);
2603 if (missing_namespace_deps)
2604 write_namespace_deps_files(missing_namespace_deps);
2607 write_dump(dump_write);
2608 if (sec_mismatch_count && !sec_mismatch_warn_only)
2609 error("Section mismatches detected.\n"
2610 "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2611 for (n = 0; n < SYMBOL_HASH_SIZE; n++) {
2614 for (s = symbolhash[n]; s; s = s->next) {
2616 error("\"%s\" [%s] is a static %s\n",
2617 s->name, s->module->name,
2618 export_str(s->export));
2622 if (nr_unresolved > MAX_UNRESOLVED_REPORTS)
2623 warn("suppressed %u unresolved symbol warnings because there were too many)\n",
2624 nr_unresolved - MAX_UNRESOLVED_REPORTS);
2628 return error_occurred ? 1 : 0;