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