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