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