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