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