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