]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - scripts/mod/modpost.c
modpost: Add flag -E for making section mismatches fatal
[karo-tx-linux.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                         return 1;
599         /* Do not ignore this symbol */
600         return 0;
601 }
602
603 #define CRC_PFX     VMLINUX_SYMBOL_STR(__crc_)
604 #define KSYMTAB_PFX VMLINUX_SYMBOL_STR(__ksymtab_)
605
606 static void handle_modversions(struct module *mod, struct elf_info *info,
607                                Elf_Sym *sym, const char *symname)
608 {
609         unsigned int crc;
610         enum export export;
611
612         if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
613             strncmp(symname, "__ksymtab", 9) == 0)
614                 export = export_from_secname(info, get_secindex(info, sym));
615         else
616                 export = export_from_sec(info, get_secindex(info, sym));
617
618         /* CRC'd symbol */
619         if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
620                 crc = (unsigned int) sym->st_value;
621                 sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
622                                 export);
623         }
624
625         switch (sym->st_shndx) {
626         case SHN_COMMON:
627                 if (!strncmp(symname, "__gnu_lto_", sizeof("__gnu_lto_")-1)) {
628                         /* Should warn here, but modpost runs before the linker */
629                 } else
630                         warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
631                 break;
632         case SHN_UNDEF:
633                 /* undefined symbol */
634                 if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
635                     ELF_ST_BIND(sym->st_info) != STB_WEAK)
636                         break;
637                 if (ignore_undef_symbol(info, symname))
638                         break;
639 /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */
640 #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER)
641 /* add compatibility with older glibc */
642 #ifndef STT_SPARC_REGISTER
643 #define STT_SPARC_REGISTER STT_REGISTER
644 #endif
645                 if (info->hdr->e_machine == EM_SPARC ||
646                     info->hdr->e_machine == EM_SPARCV9) {
647                         /* Ignore register directives. */
648                         if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
649                                 break;
650                         if (symname[0] == '.') {
651                                 char *munged = strdup(symname);
652                                 munged[0] = '_';
653                                 munged[1] = toupper(munged[1]);
654                                 symname = munged;
655                         }
656                 }
657 #endif
658
659 #ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
660                 if (symname[0] != '_')
661                         break;
662                 else
663                         symname++;
664 #endif
665                 mod->unres = alloc_symbol(symname,
666                                           ELF_ST_BIND(sym->st_info) == STB_WEAK,
667                                           mod->unres);
668                 break;
669         default:
670                 /* All exported symbols */
671                 if (strncmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) {
672                         sym_add_exported(symname + strlen(KSYMTAB_PFX), mod,
673                                         export);
674                 }
675                 if (strcmp(symname, VMLINUX_SYMBOL_STR(init_module)) == 0)
676                         mod->has_init = 1;
677                 if (strcmp(symname, VMLINUX_SYMBOL_STR(cleanup_module)) == 0)
678                         mod->has_cleanup = 1;
679                 break;
680         }
681 }
682
683 /**
684  * Parse tag=value strings from .modinfo section
685  **/
686 static char *next_string(char *string, unsigned long *secsize)
687 {
688         /* Skip non-zero chars */
689         while (string[0]) {
690                 string++;
691                 if ((*secsize)-- <= 1)
692                         return NULL;
693         }
694
695         /* Skip any zero padding. */
696         while (!string[0]) {
697                 string++;
698                 if ((*secsize)-- <= 1)
699                         return NULL;
700         }
701         return string;
702 }
703
704 static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
705                               const char *tag, char *info)
706 {
707         char *p;
708         unsigned int taglen = strlen(tag);
709         unsigned long size = modinfo_len;
710
711         if (info) {
712                 size -= info - (char *)modinfo;
713                 modinfo = next_string(info, &size);
714         }
715
716         for (p = modinfo; p; p = next_string(p, &size)) {
717                 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
718                         return p + taglen + 1;
719         }
720         return NULL;
721 }
722
723 static char *get_modinfo(void *modinfo, unsigned long modinfo_len,
724                          const char *tag)
725
726 {
727         return get_next_modinfo(modinfo, modinfo_len, tag, NULL);
728 }
729
730 /**
731  * Test if string s ends in string sub
732  * return 0 if match
733  **/
734 static int strrcmp(const char *s, const char *sub)
735 {
736         int slen, sublen;
737
738         if (!s || !sub)
739                 return 1;
740
741         slen = strlen(s);
742         sublen = strlen(sub);
743
744         if ((slen == 0) || (sublen == 0))
745                 return 1;
746
747         if (sublen > slen)
748                 return 1;
749
750         return memcmp(s + slen - sublen, sub, sublen);
751 }
752
753 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
754 {
755         if (sym)
756                 return elf->strtab + sym->st_name;
757         else
758                 return "(unknown)";
759 }
760
761 static const char *sec_name(struct elf_info *elf, int secindex)
762 {
763         Elf_Shdr *sechdrs = elf->sechdrs;
764         return (void *)elf->hdr +
765                 elf->sechdrs[elf->secindex_strings].sh_offset +
766                 sechdrs[secindex].sh_name;
767 }
768
769 static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
770 {
771         return (void *)elf->hdr +
772                 elf->sechdrs[elf->secindex_strings].sh_offset +
773                 sechdr->sh_name;
774 }
775
776 /* The pattern is an array of simple patterns.
777  * "foo" will match an exact string equal to "foo"
778  * "*foo" will match a string that ends with "foo"
779  * "foo*" will match a string that begins with "foo"
780  * "*foo*" will match a string that contains "foo"
781  */
782 static int match(const char *sym, const char * const pat[])
783 {
784         const char *p;
785         while (*pat) {
786                 p = *pat++;
787                 const char *endp = p + strlen(p) - 1;
788
789                 /* "*foo*" */
790                 if (*p == '*' && *endp == '*') {
791                         char *here, *bare = strndup(p + 1, strlen(p) - 2);
792
793                         here = strstr(sym, bare);
794                         free(bare);
795                         if (here != NULL)
796                                 return 1;
797                 }
798                 /* "*foo" */
799                 else if (*p == '*') {
800                         if (strrcmp(sym, p + 1) == 0)
801                                 return 1;
802                 }
803                 /* "foo*" */
804                 else if (*endp == '*') {
805                         if (strncmp(sym, p, strlen(p) - 1) == 0)
806                                 return 1;
807                 }
808                 /* no wildcards */
809                 else {
810                         if (strcmp(p, sym) == 0)
811                                 return 1;
812                 }
813         }
814         /* no match */
815         return 0;
816 }
817
818 /* sections that we do not want to do full section mismatch check on */
819 static const char *const section_white_list[] =
820 {
821         ".comment*",
822         ".debug*",
823         ".cranges",             /* sh64 */
824         ".zdebug*",             /* Compressed debug sections. */
825         ".GCC-command-line",    /* mn10300 */
826         ".GCC.command.line",    /* record-gcc-switches, non mn10300 */
827         ".mdebug*",        /* alpha, score, mips etc. */
828         ".pdr",            /* alpha, score, mips etc. */
829         ".stab*",
830         ".note*",
831         ".got*",
832         ".toc*",
833         ".xt.prop",                              /* xtensa */
834         ".xt.lit",         /* xtensa */
835         ".arcextmap*",                  /* arc */
836         ".gnu.linkonce.arcext*",        /* arc : modules */
837         ".gnu.lto*",
838         NULL
839 };
840
841 /*
842  * This is used to find sections missing the SHF_ALLOC flag.
843  * The cause of this is often a section specified in assembler
844  * without "ax" / "aw".
845  */
846 static void check_section(const char *modname, struct elf_info *elf,
847                           Elf_Shdr *sechdr)
848 {
849         const char *sec = sech_name(elf, sechdr);
850
851         if (sechdr->sh_type == SHT_PROGBITS &&
852             !(sechdr->sh_flags & SHF_ALLOC) &&
853             !match(sec, section_white_list)) {
854                 warn("%s (%s): unexpected non-allocatable section.\n"
855                      "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
856                      "Note that for example <linux/init.h> contains\n"
857                      "section definitions for use in .S files.\n\n",
858                      modname, sec);
859         }
860 }
861
862
863
864 #define ALL_INIT_DATA_SECTIONS \
865         ".init.setup", ".init.rodata", ".meminit.rodata", \
866         ".init.data", ".meminit.data"
867 #define ALL_EXIT_DATA_SECTIONS \
868         ".exit.data", ".memexit.data"
869
870 #define ALL_INIT_TEXT_SECTIONS \
871         ".init.text", ".meminit.text"
872 #define ALL_EXIT_TEXT_SECTIONS \
873         ".exit.text", ".memexit.text"
874
875 #define ALL_PCI_INIT_SECTIONS   \
876         ".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
877         ".pci_fixup_enable", ".pci_fixup_resume", \
878         ".pci_fixup_resume_early", ".pci_fixup_suspend"
879
880 #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
881 #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
882
883 #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
884 #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
885
886 #define DATA_SECTIONS ".data", ".data.rel"
887 #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
888                 ".kprobes.text"
889 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
890                 ".fixup", ".entry.text", ".exception.text", ".text.*", \
891                 ".coldtext"
892
893 #define INIT_SECTIONS      ".init.*"
894 #define MEM_INIT_SECTIONS  ".meminit.*"
895
896 #define EXIT_SECTIONS      ".exit.*"
897 #define MEM_EXIT_SECTIONS  ".memexit.*"
898
899 #define ALL_TEXT_SECTIONS  ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
900                 TEXT_SECTIONS, OTHER_TEXT_SECTIONS
901
902 /* init data sections */
903 static const char *const init_data_sections[] =
904         { ALL_INIT_DATA_SECTIONS, NULL };
905
906 /* all init sections */
907 static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
908
909 /* All init and exit sections (code + data) */
910 static const char *const init_exit_sections[] =
911         {ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL };
912
913 /* all text sections */
914 static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
915
916 /* data section */
917 static const char *const data_sections[] = { DATA_SECTIONS, NULL };
918
919
920 /* symbols in .data that may refer to init/exit sections */
921 #define DEFAULT_SYMBOL_WHITE_LIST                                       \
922         "*driver",                                                      \
923         "*_template", /* scsi uses *_template a lot */                  \
924         "*_timer",    /* arm uses ops structures named _timer a lot */  \
925         "*_sht",      /* scsi also used *_sht to some extent */         \
926         "*_ops",                                                        \
927         "*_probe",                                                      \
928         "*_probe_one",                                                  \
929         "*_console"
930
931 static const char *const head_sections[] = { ".head.text*", NULL };
932 static const char *const linker_symbols[] =
933         { "__init_begin", "_sinittext", "_einittext", NULL };
934 static const char *const optim_symbols[] = { "*.constprop.*", NULL };
935
936 enum mismatch {
937         TEXT_TO_ANY_INIT,
938         DATA_TO_ANY_INIT,
939         TEXT_TO_ANY_EXIT,
940         DATA_TO_ANY_EXIT,
941         XXXINIT_TO_SOME_INIT,
942         XXXEXIT_TO_SOME_EXIT,
943         ANY_INIT_TO_ANY_EXIT,
944         ANY_EXIT_TO_ANY_INIT,
945         EXPORT_TO_INIT_EXIT,
946         EXTABLE_TO_NON_TEXT,
947 };
948
949 /**
950  * Describe how to match sections on different criterias:
951  *
952  * @fromsec: Array of sections to be matched.
953  *
954  * @bad_tosec: Relocations applied to a section in @fromsec to a section in
955  * this array is forbidden (black-list).  Can be empty.
956  *
957  * @good_tosec: Relocations applied to a section in @fromsec must be
958  * targetting sections in this array (white-list).  Can be empty.
959  *
960  * @mismatch: Type of mismatch.
961  *
962  * @symbol_white_list: Do not match a relocation to a symbol in this list
963  * even if it is targetting a section in @bad_to_sec.
964  *
965  * @handler: Specific handler to call when a match is found.  If NULL,
966  * default_mismatch_handler() will be called.
967  *
968  */
969 struct sectioncheck {
970         const char *fromsec[20];
971         const char *bad_tosec[20];
972         const char *good_tosec[20];
973         enum mismatch mismatch;
974         const char *symbol_white_list[20];
975         void (*handler)(const char *modname, struct elf_info *elf,
976                         const struct sectioncheck* const mismatch,
977                         Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
978
979 };
980
981 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
982                                      const struct sectioncheck* const mismatch,
983                                      Elf_Rela *r, Elf_Sym *sym,
984                                      const char *fromsec);
985
986 static const struct sectioncheck sectioncheck[] = {
987 /* Do not reference init/exit code/data from
988  * normal code and data
989  */
990 {
991         .fromsec = { TEXT_SECTIONS, NULL },
992         .bad_tosec = { ALL_INIT_SECTIONS, NULL },
993         .mismatch = TEXT_TO_ANY_INIT,
994         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
995 },
996 {
997         .fromsec = { DATA_SECTIONS, NULL },
998         .bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
999         .mismatch = DATA_TO_ANY_INIT,
1000         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1001 },
1002 {
1003         .fromsec = { DATA_SECTIONS, NULL },
1004         .bad_tosec = { INIT_SECTIONS, NULL },
1005         .mismatch = DATA_TO_ANY_INIT,
1006         .symbol_white_list = {
1007                 "*_template", "*_timer", "*_sht", "*_ops",
1008                 "*_probe", "*_probe_one", "*_console", NULL
1009         },
1010 },
1011 {
1012         .fromsec = { TEXT_SECTIONS, NULL },
1013         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1014         .mismatch = TEXT_TO_ANY_EXIT,
1015         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1016 },
1017 {
1018         .fromsec = { DATA_SECTIONS, NULL },
1019         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1020         .mismatch = DATA_TO_ANY_EXIT,
1021         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1022 },
1023 /* Do not reference init code/data from meminit code/data */
1024 {
1025         .fromsec = { ALL_XXXINIT_SECTIONS, NULL },
1026         .bad_tosec = { INIT_SECTIONS, NULL },
1027         .mismatch = XXXINIT_TO_SOME_INIT,
1028         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1029 },
1030 /* Do not reference exit code/data from memexit code/data */
1031 {
1032         .fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
1033         .bad_tosec = { EXIT_SECTIONS, NULL },
1034         .mismatch = XXXEXIT_TO_SOME_EXIT,
1035         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1036 },
1037 /* Do not use exit code/data from init code */
1038 {
1039         .fromsec = { ALL_INIT_SECTIONS, NULL },
1040         .bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1041         .mismatch = ANY_INIT_TO_ANY_EXIT,
1042         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1043 },
1044 /* Do not use init code/data from exit code */
1045 {
1046         .fromsec = { ALL_EXIT_SECTIONS, NULL },
1047         .bad_tosec = { ALL_INIT_SECTIONS, NULL },
1048         .mismatch = ANY_EXIT_TO_ANY_INIT,
1049         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1050 },
1051 {
1052         .fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
1053         .bad_tosec = { INIT_SECTIONS, NULL },
1054         .mismatch = ANY_INIT_TO_ANY_EXIT,
1055         .symbol_white_list = { NULL },
1056 },
1057 /* Do not export init/exit functions or data */
1058 {
1059         .fromsec = { "__ksymtab*", NULL },
1060         .bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
1061         .mismatch = EXPORT_TO_INIT_EXIT,
1062         .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1063 },
1064 {
1065         .fromsec = { "__ex_table", NULL },
1066         /* If you're adding any new black-listed sections in here, consider
1067          * adding a special 'printer' for them in scripts/check_extable.
1068          */
1069         .bad_tosec = { ".altinstr_replacement", NULL },
1070         .good_tosec = {ALL_TEXT_SECTIONS , NULL},
1071         .mismatch = EXTABLE_TO_NON_TEXT,
1072         .handler = extable_mismatch_handler,
1073 }
1074 };
1075
1076 static const struct sectioncheck *section_mismatch(
1077                 const char *fromsec, const char *tosec)
1078 {
1079         int i;
1080         int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
1081         const struct sectioncheck *check = &sectioncheck[0];
1082
1083         /*
1084          * The target section could be the SHT_NUL section when we're
1085          * handling relocations to un-resolved symbols, trying to match it
1086          * doesn't make much sense and causes build failures on parisc and
1087          * mn10300 architectures.
1088          */
1089         if (*tosec == '\0')
1090                 return NULL;
1091
1092         for (i = 0; i < elems; i++) {
1093                 if (match(fromsec, check->fromsec)) {
1094                         if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1095                                 return check;
1096                         if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1097                                 return check;
1098                 }
1099                 check++;
1100         }
1101         return NULL;
1102 }
1103
1104 /**
1105  * Whitelist to allow certain references to pass with no warning.
1106  *
1107  * Pattern 1:
1108  *   If a module parameter is declared __initdata and permissions=0
1109  *   then this is legal despite the warning generated.
1110  *   We cannot see value of permissions here, so just ignore
1111  *   this pattern.
1112  *   The pattern is identified by:
1113  *   tosec   = .init.data
1114  *   fromsec = .data*
1115  *   atsym   =__param*
1116  *
1117  * Pattern 1a:
1118  *   module_param_call() ops can refer to __init set function if permissions=0
1119  *   The pattern is identified by:
1120  *   tosec   = .init.text
1121  *   fromsec = .data*
1122  *   atsym   = __param_ops_*
1123  *
1124  * Pattern 2:
1125  *   Many drivers utilise a *driver container with references to
1126  *   add, remove, probe functions etc.
1127  *   the pattern is identified by:
1128  *   tosec   = init or exit section
1129  *   fromsec = data section
1130  *   atsym = *driver, *_template, *_sht, *_ops, *_probe,
1131  *           *probe_one, *_console, *_timer
1132  *
1133  * Pattern 3:
1134  *   Whitelist all references from .head.text to any init section
1135  *
1136  * Pattern 4:
1137  *   Some symbols belong to init section but still it is ok to reference
1138  *   these from non-init sections as these symbols don't have any memory
1139  *   allocated for them and symbol address and value are same. So even
1140  *   if init section is freed, its ok to reference those symbols.
1141  *   For ex. symbols marking the init section boundaries.
1142  *   This pattern is identified by
1143  *   refsymname = __init_begin, _sinittext, _einittext
1144  *
1145  * Pattern 5:
1146  *   GCC may optimize static inlines when fed constant arg(s) resulting
1147  *   in functions like cpumask_empty() -- generating an associated symbol
1148  *   cpumask_empty.constprop.3 that appears in the audit.  If the const that
1149  *   is passed in comes from __init, like say nmi_ipi_mask, we get a
1150  *   meaningless section warning.  May need to add isra symbols too...
1151  *   This pattern is identified by
1152  *   tosec   = init section
1153  *   fromsec = text section
1154  *   refsymname = *.constprop.*
1155  *
1156  **/
1157 static int secref_whitelist(const struct sectioncheck *mismatch,
1158                             const char *fromsec, const char *fromsym,
1159                             const char *tosec, const char *tosym)
1160 {
1161         /* Check for pattern 1 */
1162         if (match(tosec, init_data_sections) &&
1163             match(fromsec, data_sections) &&
1164             (strncmp(fromsym, "__param", strlen("__param")) == 0))
1165                 return 0;
1166
1167         /* Check for pattern 1a */
1168         if (strcmp(tosec, ".init.text") == 0 &&
1169             match(fromsec, data_sections) &&
1170             (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
1171                 return 0;
1172
1173         /* Check for pattern 2 */
1174         if (match(tosec, init_exit_sections) &&
1175             match(fromsec, data_sections) &&
1176             match(fromsym, mismatch->symbol_white_list))
1177                 return 0;
1178
1179         /* Check for pattern 3 */
1180         if (match(fromsec, head_sections) &&
1181             match(tosec, init_sections))
1182                 return 0;
1183
1184         /* Check for pattern 4 */
1185         if (match(tosym, linker_symbols))
1186                 return 0;
1187
1188         /* Check for pattern 5 */
1189         if (match(fromsec, text_sections) &&
1190             match(tosec, init_sections) &&
1191             match(fromsym, optim_symbols))
1192                 return 0;
1193
1194         return 1;
1195 }
1196
1197 /**
1198  * Find symbol based on relocation record info.
1199  * In some cases the symbol supplied is a valid symbol so
1200  * return refsym. If st_name != 0 we assume this is a valid symbol.
1201  * In other cases the symbol needs to be looked up in the symbol table
1202  * based on section and address.
1203  *  **/
1204 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1205                                 Elf_Sym *relsym)
1206 {
1207         Elf_Sym *sym;
1208         Elf_Sym *near = NULL;
1209         Elf64_Sword distance = 20;
1210         Elf64_Sword d;
1211         unsigned int relsym_secindex;
1212
1213         if (relsym->st_name != 0)
1214                 return relsym;
1215
1216         relsym_secindex = get_secindex(elf, relsym);
1217         for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1218                 if (get_secindex(elf, sym) != relsym_secindex)
1219                         continue;
1220                 if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1221                         continue;
1222                 if (sym->st_value == addr)
1223                         return sym;
1224                 /* Find a symbol nearby - addr are maybe negative */
1225                 d = sym->st_value - addr;
1226                 if (d < 0)
1227                         d = addr - sym->st_value;
1228                 if (d < distance) {
1229                         distance = d;
1230                         near = sym;
1231                 }
1232         }
1233         /* We need a close match */
1234         if (distance < 20)
1235                 return near;
1236         else
1237                 return NULL;
1238 }
1239
1240 static inline int is_arm_mapping_symbol(const char *str)
1241 {
1242         return str[0] == '$' && strchr("axtd", str[1])
1243                && (str[2] == '\0' || str[2] == '.');
1244 }
1245
1246 /*
1247  * If there's no name there, ignore it; likewise, ignore it if it's
1248  * one of the magic symbols emitted used by current ARM tools.
1249  *
1250  * Otherwise if find_symbols_between() returns those symbols, they'll
1251  * fail the whitelist tests and cause lots of false alarms ... fixable
1252  * only by merging __exit and __init sections into __text, bloating
1253  * the kernel (which is especially evil on embedded platforms).
1254  */
1255 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1256 {
1257         const char *name = elf->strtab + sym->st_name;
1258
1259         if (!name || !strlen(name))
1260                 return 0;
1261         return !is_arm_mapping_symbol(name);
1262 }
1263
1264 /*
1265  * Find symbols before or equal addr and after addr - in the section sec.
1266  * If we find two symbols with equal offset prefer one with a valid name.
1267  * The ELF format may have a better way to detect what type of symbol
1268  * it is, but this works for now.
1269  **/
1270 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1271                                  const char *sec)
1272 {
1273         Elf_Sym *sym;
1274         Elf_Sym *near = NULL;
1275         Elf_Addr distance = ~0;
1276
1277         for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1278                 const char *symsec;
1279
1280                 if (is_shndx_special(sym->st_shndx))
1281                         continue;
1282                 symsec = sec_name(elf, get_secindex(elf, sym));
1283                 if (strcmp(symsec, sec) != 0)
1284                         continue;
1285                 if (!is_valid_name(elf, sym))
1286                         continue;
1287                 if (sym->st_value <= addr) {
1288                         if ((addr - sym->st_value) < distance) {
1289                                 distance = addr - sym->st_value;
1290                                 near = sym;
1291                         } else if ((addr - sym->st_value) == distance) {
1292                                 near = sym;
1293                         }
1294                 }
1295         }
1296         return near;
1297 }
1298
1299 /*
1300  * Convert a section name to the function/data attribute
1301  * .init.text => __init
1302  * .memexitconst => __memconst
1303  * etc.
1304  *
1305  * The memory of returned value has been allocated on a heap. The user of this
1306  * method should free it after usage.
1307 */
1308 static char *sec2annotation(const char *s)
1309 {
1310         if (match(s, init_exit_sections)) {
1311                 char *p = malloc(20);
1312                 char *r = p;
1313
1314                 *p++ = '_';
1315                 *p++ = '_';
1316                 if (*s == '.')
1317                         s++;
1318                 while (*s && *s != '.')
1319                         *p++ = *s++;
1320                 *p = '\0';
1321                 if (*s == '.')
1322                         s++;
1323                 if (strstr(s, "rodata") != NULL)
1324                         strcat(p, "const ");
1325                 else if (strstr(s, "data") != NULL)
1326                         strcat(p, "data ");
1327                 else
1328                         strcat(p, " ");
1329                 return r;
1330         } else {
1331                 return strdup("");
1332         }
1333 }
1334
1335 static int is_function(Elf_Sym *sym)
1336 {
1337         if (sym)
1338                 return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1339         else
1340                 return -1;
1341 }
1342
1343 static void print_section_list(const char * const list[20])
1344 {
1345         const char *const *s = list;
1346
1347         while (*s) {
1348                 fprintf(stderr, "%s", *s);
1349                 s++;
1350                 if (*s)
1351                         fprintf(stderr, ", ");
1352         }
1353         fprintf(stderr, "\n");
1354 }
1355
1356 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1357 {
1358         switch (is_func) {
1359         case 0: *name = "variable"; *name_p = ""; break;
1360         case 1: *name = "function"; *name_p = "()"; break;
1361         default: *name = "(unknown reference)"; *name_p = ""; break;
1362         }
1363 }
1364
1365 /*
1366  * Print a warning about a section mismatch.
1367  * Try to find symbols near it so user can find it.
1368  * Check whitelist before warning - it may be a false positive.
1369  */
1370 static void report_sec_mismatch(const char *modname,
1371                                 const struct sectioncheck *mismatch,
1372                                 const char *fromsec,
1373                                 unsigned long long fromaddr,
1374                                 const char *fromsym,
1375                                 int from_is_func,
1376                                 const char *tosec, const char *tosym,
1377                                 int to_is_func)
1378 {
1379         const char *from, *from_p;
1380         const char *to, *to_p;
1381         char *prl_from;
1382         char *prl_to;
1383
1384         sec_mismatch_count++;
1385         if (!sec_mismatch_verbose)
1386                 return;
1387
1388         get_pretty_name(from_is_func, &from, &from_p);
1389         get_pretty_name(to_is_func, &to, &to_p);
1390
1391         warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s "
1392              "to the %s %s:%s%s\n",
1393              modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1394              tosym, to_p);
1395
1396         switch (mismatch->mismatch) {
1397         case TEXT_TO_ANY_INIT:
1398                 prl_from = sec2annotation(fromsec);
1399                 prl_to = sec2annotation(tosec);
1400                 fprintf(stderr,
1401                 "The function %s%s() references\n"
1402                 "the %s %s%s%s.\n"
1403                 "This is often because %s lacks a %s\n"
1404                 "annotation or the annotation of %s is wrong.\n",
1405                 prl_from, fromsym,
1406                 to, prl_to, tosym, to_p,
1407                 fromsym, prl_to, tosym);
1408                 free(prl_from);
1409                 free(prl_to);
1410                 break;
1411         case DATA_TO_ANY_INIT: {
1412                 prl_to = sec2annotation(tosec);
1413                 fprintf(stderr,
1414                 "The variable %s references\n"
1415                 "the %s %s%s%s\n"
1416                 "If the reference is valid then annotate the\n"
1417                 "variable with __init* or __refdata (see linux/init.h) "
1418                 "or name the variable:\n",
1419                 fromsym, to, prl_to, tosym, to_p);
1420                 print_section_list(mismatch->symbol_white_list);
1421                 free(prl_to);
1422                 break;
1423         }
1424         case TEXT_TO_ANY_EXIT:
1425                 prl_to = sec2annotation(tosec);
1426                 fprintf(stderr,
1427                 "The function %s() references a %s in an exit section.\n"
1428                 "Often the %s %s%s has valid usage outside the exit section\n"
1429                 "and the fix is to remove the %sannotation of %s.\n",
1430                 fromsym, to, to, tosym, to_p, prl_to, tosym);
1431                 free(prl_to);
1432                 break;
1433         case DATA_TO_ANY_EXIT: {
1434                 prl_to = sec2annotation(tosec);
1435                 fprintf(stderr,
1436                 "The variable %s references\n"
1437                 "the %s %s%s%s\n"
1438                 "If the reference is valid then annotate the\n"
1439                 "variable with __exit* (see linux/init.h) or "
1440                 "name the variable:\n",
1441                 fromsym, to, prl_to, tosym, to_p);
1442                 print_section_list(mismatch->symbol_white_list);
1443                 free(prl_to);
1444                 break;
1445         }
1446         case XXXINIT_TO_SOME_INIT:
1447         case XXXEXIT_TO_SOME_EXIT:
1448                 prl_from = sec2annotation(fromsec);
1449                 prl_to = sec2annotation(tosec);
1450                 fprintf(stderr,
1451                 "The %s %s%s%s references\n"
1452                 "a %s %s%s%s.\n"
1453                 "If %s is only used by %s then\n"
1454                 "annotate %s with a matching annotation.\n",
1455                 from, prl_from, fromsym, from_p,
1456                 to, prl_to, tosym, to_p,
1457                 tosym, fromsym, tosym);
1458                 free(prl_from);
1459                 free(prl_to);
1460                 break;
1461         case ANY_INIT_TO_ANY_EXIT:
1462                 prl_from = sec2annotation(fromsec);
1463                 prl_to = sec2annotation(tosec);
1464                 fprintf(stderr,
1465                 "The %s %s%s%s references\n"
1466                 "a %s %s%s%s.\n"
1467                 "This is often seen when error handling "
1468                 "in the init function\n"
1469                 "uses functionality in the exit path.\n"
1470                 "The fix is often to remove the %sannotation of\n"
1471                 "%s%s so it may be used outside an exit section.\n",
1472                 from, prl_from, fromsym, from_p,
1473                 to, prl_to, tosym, to_p,
1474                 prl_to, tosym, to_p);
1475                 free(prl_from);
1476                 free(prl_to);
1477                 break;
1478         case ANY_EXIT_TO_ANY_INIT:
1479                 prl_from = sec2annotation(fromsec);
1480                 prl_to = sec2annotation(tosec);
1481                 fprintf(stderr,
1482                 "The %s %s%s%s references\n"
1483                 "a %s %s%s%s.\n"
1484                 "This is often seen when error handling "
1485                 "in the exit function\n"
1486                 "uses functionality in the init path.\n"
1487                 "The fix is often to remove the %sannotation of\n"
1488                 "%s%s so it may be used outside an init section.\n",
1489                 from, prl_from, fromsym, from_p,
1490                 to, prl_to, tosym, to_p,
1491                 prl_to, tosym, to_p);
1492                 free(prl_from);
1493                 free(prl_to);
1494                 break;
1495         case EXPORT_TO_INIT_EXIT:
1496                 prl_to = sec2annotation(tosec);
1497                 fprintf(stderr,
1498                 "The symbol %s is exported and annotated %s\n"
1499                 "Fix this by removing the %sannotation of %s "
1500                 "or drop the export.\n",
1501                 tosym, prl_to, prl_to, tosym);
1502                 free(prl_to);
1503                 break;
1504         case EXTABLE_TO_NON_TEXT:
1505                 fatal("There's a special handler for this mismatch type, "
1506                       "we should never get here.");
1507                 break;
1508         }
1509         fprintf(stderr, "\n");
1510 }
1511
1512 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1513                                      const struct sectioncheck* const mismatch,
1514                                      Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1515 {
1516         const char *tosec;
1517         Elf_Sym *to;
1518         Elf_Sym *from;
1519         const char *tosym;
1520         const char *fromsym;
1521
1522         from = find_elf_symbol2(elf, r->r_offset, fromsec);
1523         fromsym = sym_name(elf, from);
1524
1525         if (!strncmp(fromsym, "reference___initcall",
1526                      sizeof("reference___initcall")-1))
1527                 return;
1528
1529         tosec = sec_name(elf, get_secindex(elf, sym));
1530         to = find_elf_symbol(elf, r->r_addend, sym);
1531         tosym = sym_name(elf, to);
1532
1533         /* check whitelist - we may ignore it */
1534         if (secref_whitelist(mismatch,
1535                              fromsec, fromsym, tosec, tosym)) {
1536                 report_sec_mismatch(modname, mismatch,
1537                                     fromsec, r->r_offset, fromsym,
1538                                     is_function(from), tosec, tosym,
1539                                     is_function(to));
1540         }
1541 }
1542
1543 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1544 {
1545         if (section_index > elf->num_sections)
1546                 fatal("section_index is outside elf->num_sections!\n");
1547
1548         return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1549 }
1550
1551 /*
1552  * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1553  * to know the sizeof(struct exception_table_entry) for the target architecture.
1554  */
1555 static unsigned int extable_entry_size = 0;
1556 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1557 {
1558         /*
1559          * If we're currently checking the second relocation within __ex_table,
1560          * that relocation offset tells us the offsetof(struct
1561          * exception_table_entry, fixup) which is equal to sizeof(struct
1562          * exception_table_entry) divided by two.  We use that to our advantage
1563          * since there's no portable way to get that size as every architecture
1564          * seems to go with different sized types.  Not pretty but better than
1565          * hard-coding the size for every architecture..
1566          */
1567         if (!extable_entry_size)
1568                 extable_entry_size = r->r_offset * 2;
1569 }
1570
1571 static inline bool is_extable_fault_address(Elf_Rela *r)
1572 {
1573         /*
1574          * extable_entry_size is only discovered after we've handled the
1575          * _second_ relocation in __ex_table, so only abort when we're not
1576          * handling the first reloc and extable_entry_size is zero.
1577          */
1578         if (r->r_offset && extable_entry_size == 0)
1579                 fatal("extable_entry size hasn't been discovered!\n");
1580
1581         return ((r->r_offset == 0) ||
1582                 (r->r_offset % extable_entry_size == 0));
1583 }
1584
1585 #define is_second_extable_reloc(Start, Cur, Sec)                        \
1586         (((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1587
1588 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1589                                     const struct sectioncheck* const mismatch,
1590                                     Elf_Rela* r, Elf_Sym* sym,
1591                                     const char* fromsec, const char* tosec)
1592 {
1593         Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1594         const char* fromsym_name = sym_name(elf, fromsym);
1595         Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1596         const char* tosym_name = sym_name(elf, tosym);
1597         const char* from_pretty_name;
1598         const char* from_pretty_name_p;
1599         const char* to_pretty_name;
1600         const char* to_pretty_name_p;
1601
1602         get_pretty_name(is_function(fromsym),
1603                         &from_pretty_name, &from_pretty_name_p);
1604         get_pretty_name(is_function(tosym),
1605                         &to_pretty_name, &to_pretty_name_p);
1606
1607         warn("%s(%s+0x%lx): Section mismatch in reference"
1608              " from the %s %s%s to the %s %s:%s%s\n",
1609              modname, fromsec, (long)r->r_offset, from_pretty_name,
1610              fromsym_name, from_pretty_name_p,
1611              to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1612
1613         if (!match(tosec, mismatch->bad_tosec) &&
1614             is_executable_section(elf, get_secindex(elf, sym)))
1615                 fprintf(stderr,
1616                         "The relocation at %s+0x%lx references\n"
1617                         "section \"%s\" which is not in the list of\n"
1618                         "authorized sections.  If you're adding a new section\n"
1619                         "and/or if this reference is valid, add \"%s\" to the\n"
1620                         "list of authorized sections to jump to on fault.\n"
1621                         "This can be achieved by adding \"%s\" to \n"
1622                         "OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1623                         fromsec, (long)r->r_offset, tosec, tosec, tosec);
1624 }
1625
1626 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1627                                      const struct sectioncheck* const mismatch,
1628                                      Elf_Rela* r, Elf_Sym* sym,
1629                                      const char *fromsec)
1630 {
1631         const char* tosec = sec_name(elf, get_secindex(elf, sym));
1632
1633         sec_mismatch_count++;
1634
1635         if (sec_mismatch_verbose)
1636                 report_extable_warnings(modname, elf, mismatch, r, sym,
1637                                         fromsec, tosec);
1638
1639         if (match(tosec, mismatch->bad_tosec))
1640                 fatal("The relocation at %s+0x%lx references\n"
1641                       "section \"%s\" which is black-listed.\n"
1642                       "Something is seriously wrong and should be fixed.\n"
1643                       "You might get more information about where this is\n"
1644                       "coming from by using scripts/check_extable.sh %s\n",
1645                       fromsec, (long)r->r_offset, tosec, modname);
1646         else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1647                 if (is_extable_fault_address(r))
1648                         fatal("The relocation at %s+0x%lx references\n"
1649                               "section \"%s\" which is not executable, IOW\n"
1650                               "it is not possible for the kernel to fault\n"
1651                               "at that address.  Something is seriously wrong\n"
1652                               "and should be fixed.\n",
1653                               fromsec, (long)r->r_offset, tosec);
1654                 else
1655                         fatal("The relocation at %s+0x%lx references\n"
1656                               "section \"%s\" which is not executable, IOW\n"
1657                               "the kernel will fault if it ever tries to\n"
1658                               "jump to it.  Something is seriously wrong\n"
1659                               "and should be fixed.\n",
1660                               fromsec, (long)r->r_offset, tosec);
1661         }
1662 }
1663
1664 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1665                                    Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1666 {
1667         const char *tosec = sec_name(elf, get_secindex(elf, sym));;
1668         const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1669
1670         if (mismatch) {
1671                 if (mismatch->handler)
1672                         mismatch->handler(modname, elf,  mismatch,
1673                                           r, sym, fromsec);
1674                 else
1675                         default_mismatch_handler(modname, elf, mismatch,
1676                                                  r, sym, fromsec);
1677         }
1678 }
1679
1680 static unsigned int *reloc_location(struct elf_info *elf,
1681                                     Elf_Shdr *sechdr, Elf_Rela *r)
1682 {
1683         Elf_Shdr *sechdrs = elf->sechdrs;
1684         int section = sechdr->sh_info;
1685
1686         return (void *)elf->hdr + sechdrs[section].sh_offset +
1687                 r->r_offset;
1688 }
1689
1690 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1691 {
1692         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1693         unsigned int *location = reloc_location(elf, sechdr, r);
1694
1695         switch (r_typ) {
1696         case R_386_32:
1697                 r->r_addend = TO_NATIVE(*location);
1698                 break;
1699         case R_386_PC32:
1700                 r->r_addend = TO_NATIVE(*location) + 4;
1701                 /* For CONFIG_RELOCATABLE=y */
1702                 if (elf->hdr->e_type == ET_EXEC)
1703                         r->r_addend += r->r_offset;
1704                 break;
1705         }
1706         return 0;
1707 }
1708
1709 #ifndef R_ARM_CALL
1710 #define R_ARM_CALL      28
1711 #endif
1712 #ifndef R_ARM_JUMP24
1713 #define R_ARM_JUMP24    29
1714 #endif
1715
1716 #ifndef R_ARM_THM_CALL
1717 #define R_ARM_THM_CALL          10
1718 #endif
1719 #ifndef R_ARM_THM_JUMP24
1720 #define R_ARM_THM_JUMP24        30
1721 #endif
1722 #ifndef R_ARM_THM_JUMP19
1723 #define R_ARM_THM_JUMP19        51
1724 #endif
1725
1726 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1727 {
1728         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1729
1730         switch (r_typ) {
1731         case R_ARM_ABS32:
1732                 /* From ARM ABI: (S + A) | T */
1733                 r->r_addend = (int)(long)
1734                               (elf->symtab_start + ELF_R_SYM(r->r_info));
1735                 break;
1736         case R_ARM_PC24:
1737         case R_ARM_CALL:
1738         case R_ARM_JUMP24:
1739         case R_ARM_THM_CALL:
1740         case R_ARM_THM_JUMP24:
1741         case R_ARM_THM_JUMP19:
1742                 /* From ARM ABI: ((S + A) | T) - P */
1743                 r->r_addend = (int)(long)(elf->hdr +
1744                               sechdr->sh_offset +
1745                               (r->r_offset - sechdr->sh_addr));
1746                 break;
1747         default:
1748                 return 1;
1749         }
1750         return 0;
1751 }
1752
1753 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1754 {
1755         unsigned int r_typ = ELF_R_TYPE(r->r_info);
1756         unsigned int *location = reloc_location(elf, sechdr, r);
1757         unsigned int inst;
1758
1759         if (r_typ == R_MIPS_HI16)
1760                 return 1;       /* skip this */
1761         inst = TO_NATIVE(*location);
1762         switch (r_typ) {
1763         case R_MIPS_LO16:
1764                 r->r_addend = inst & 0xffff;
1765                 break;
1766         case R_MIPS_26:
1767                 r->r_addend = (inst & 0x03ffffff) << 2;
1768                 break;
1769         case R_MIPS_32:
1770                 r->r_addend = inst;
1771                 break;
1772         }
1773         return 0;
1774 }
1775
1776 static void section_rela(const char *modname, struct elf_info *elf,
1777                          Elf_Shdr *sechdr)
1778 {
1779         Elf_Sym  *sym;
1780         Elf_Rela *rela;
1781         Elf_Rela r;
1782         unsigned int r_sym;
1783         const char *fromsec;
1784
1785         Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1786         Elf_Rela *stop  = (void *)start + sechdr->sh_size;
1787
1788         fromsec = sech_name(elf, sechdr);
1789         fromsec += strlen(".rela");
1790         /* if from section (name) is know good then skip it */
1791         if (match(fromsec, section_white_list))
1792                 return;
1793
1794         for (rela = start; rela < stop; rela++) {
1795                 r.r_offset = TO_NATIVE(rela->r_offset);
1796 #if KERNEL_ELFCLASS == ELFCLASS64
1797                 if (elf->hdr->e_machine == EM_MIPS) {
1798                         unsigned int r_typ;
1799                         r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1800                         r_sym = TO_NATIVE(r_sym);
1801                         r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1802                         r.r_info = ELF64_R_INFO(r_sym, r_typ);
1803                 } else {
1804                         r.r_info = TO_NATIVE(rela->r_info);
1805                         r_sym = ELF_R_SYM(r.r_info);
1806                 }
1807 #else
1808                 r.r_info = TO_NATIVE(rela->r_info);
1809                 r_sym = ELF_R_SYM(r.r_info);
1810 #endif
1811                 r.r_addend = TO_NATIVE(rela->r_addend);
1812                 sym = elf->symtab_start + r_sym;
1813                 /* Skip special sections */
1814                 if (is_shndx_special(sym->st_shndx))
1815                         continue;
1816                 if (is_second_extable_reloc(start, rela, fromsec))
1817                         find_extable_entry_size(fromsec, &r);
1818                 check_section_mismatch(modname, elf, &r, sym, fromsec);
1819         }
1820 }
1821
1822 static void section_rel(const char *modname, struct elf_info *elf,
1823                         Elf_Shdr *sechdr)
1824 {
1825         Elf_Sym *sym;
1826         Elf_Rel *rel;
1827         Elf_Rela r;
1828         unsigned int r_sym;
1829         const char *fromsec;
1830
1831         Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1832         Elf_Rel *stop  = (void *)start + sechdr->sh_size;
1833
1834         fromsec = sech_name(elf, sechdr);
1835         fromsec += strlen(".rel");
1836         /* if from section (name) is know good then skip it */
1837         if (match(fromsec, section_white_list))
1838                 return;
1839
1840         for (rel = start; rel < stop; rel++) {
1841                 r.r_offset = TO_NATIVE(rel->r_offset);
1842 #if KERNEL_ELFCLASS == ELFCLASS64
1843                 if (elf->hdr->e_machine == EM_MIPS) {
1844                         unsigned int r_typ;
1845                         r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1846                         r_sym = TO_NATIVE(r_sym);
1847                         r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1848                         r.r_info = ELF64_R_INFO(r_sym, r_typ);
1849                 } else {
1850                         r.r_info = TO_NATIVE(rel->r_info);
1851                         r_sym = ELF_R_SYM(r.r_info);
1852                 }
1853 #else
1854                 r.r_info = TO_NATIVE(rel->r_info);
1855                 r_sym = ELF_R_SYM(r.r_info);
1856 #endif
1857                 r.r_addend = 0;
1858                 switch (elf->hdr->e_machine) {
1859                 case EM_386:
1860                         if (addend_386_rel(elf, sechdr, &r))
1861                                 continue;
1862                         break;
1863                 case EM_ARM:
1864                         if (addend_arm_rel(elf, sechdr, &r))
1865                                 continue;
1866                         break;
1867                 case EM_MIPS:
1868                         if (addend_mips_rel(elf, sechdr, &r))
1869                                 continue;
1870                         break;
1871                 }
1872                 sym = elf->symtab_start + r_sym;
1873                 /* Skip special sections */
1874                 if (is_shndx_special(sym->st_shndx))
1875                         continue;
1876                 if (is_second_extable_reloc(start, rel, fromsec))
1877                         find_extable_entry_size(fromsec, &r);
1878                 check_section_mismatch(modname, elf, &r, sym, fromsec);
1879         }
1880 }
1881
1882 /**
1883  * A module includes a number of sections that are discarded
1884  * either when loaded or when used as built-in.
1885  * For loaded modules all functions marked __init and all data
1886  * marked __initdata will be discarded when the module has been initialized.
1887  * Likewise for modules used built-in the sections marked __exit
1888  * are discarded because __exit marked function are supposed to be called
1889  * only when a module is unloaded which never happens for built-in modules.
1890  * The check_sec_ref() function traverses all relocation records
1891  * to find all references to a section that reference a section that will
1892  * be discarded and warns about it.
1893  **/
1894 static void check_sec_ref(struct module *mod, const char *modname,
1895                           struct elf_info *elf)
1896 {
1897         int i;
1898         Elf_Shdr *sechdrs = elf->sechdrs;
1899
1900         /* Walk through all sections */
1901         for (i = 0; i < elf->num_sections; i++) {
1902                 check_section(modname, elf, &elf->sechdrs[i]);
1903                 /* We want to process only relocation sections and not .init */
1904                 if (sechdrs[i].sh_type == SHT_RELA)
1905                         section_rela(modname, elf, &elf->sechdrs[i]);
1906                 else if (sechdrs[i].sh_type == SHT_REL)
1907                         section_rel(modname, elf, &elf->sechdrs[i]);
1908         }
1909 }
1910
1911 static char *remove_dot(char *s)
1912 {
1913         size_t n = strcspn(s, ".");
1914
1915         if (n && s[n]) {
1916                 size_t m = strspn(s + n + 1, "0123456789");
1917                 if (m && (s[n + m] == '.' || s[n + m] == 0))
1918                         s[n] = 0;
1919         }
1920         return s;
1921 }
1922
1923 static void read_symbols(char *modname)
1924 {
1925         const char *symname;
1926         char *version;
1927         char *license;
1928         struct module *mod;
1929         struct elf_info info = { };
1930         Elf_Sym *sym;
1931
1932         if (!parse_elf(&info, modname))
1933                 return;
1934
1935         mod = new_module(modname);
1936
1937         /* When there's no vmlinux, don't print warnings about
1938          * unresolved symbols (since there'll be too many ;) */
1939         if (is_vmlinux(modname)) {
1940                 have_vmlinux = 1;
1941                 mod->skip = 1;
1942         }
1943
1944         license = get_modinfo(info.modinfo, info.modinfo_len, "license");
1945         if (info.modinfo && !license && !is_vmlinux(modname))
1946                 warn("modpost: missing MODULE_LICENSE() in %s\n"
1947                      "see include/linux/module.h for "
1948                      "more information\n", modname);
1949         while (license) {
1950                 if (license_is_gpl_compatible(license))
1951                         mod->gpl_compatible = 1;
1952                 else {
1953                         mod->gpl_compatible = 0;
1954                         break;
1955                 }
1956                 license = get_next_modinfo(info.modinfo, info.modinfo_len,
1957                                            "license", license);
1958         }
1959
1960         for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1961                 symname = remove_dot(info.strtab + sym->st_name);
1962
1963                 handle_modversions(mod, &info, sym, symname);
1964                 handle_moddevtable(mod, &info, sym, symname);
1965         }
1966         if (!is_vmlinux(modname) ||
1967              (is_vmlinux(modname) && vmlinux_section_warnings))
1968                 check_sec_ref(mod, modname, &info);
1969
1970         version = get_modinfo(info.modinfo, info.modinfo_len, "version");
1971         if (version)
1972                 maybe_frob_rcs_version(modname, version, info.modinfo,
1973                                        version - (char *)info.hdr);
1974         if (version || (all_versions && !is_vmlinux(modname)))
1975                 get_src_version(modname, mod->srcversion,
1976                                 sizeof(mod->srcversion)-1);
1977
1978         parse_elf_finish(&info);
1979
1980         /* Our trick to get versioning for module struct etc. - it's
1981          * never passed as an argument to an exported function, so
1982          * the automatic versioning doesn't pick it up, but it's really
1983          * important anyhow */
1984         if (modversions)
1985                 mod->unres = alloc_symbol("module_layout", 0, mod->unres);
1986 }
1987
1988 static void read_symbols_from_files(const char *filename)
1989 {
1990         FILE *in = stdin;
1991         char fname[PATH_MAX];
1992
1993         if (strcmp(filename, "-") != 0) {
1994                 in = fopen(filename, "r");
1995                 if (!in)
1996                         fatal("Can't open filenames file %s: %m", filename);
1997         }
1998
1999         while (fgets(fname, PATH_MAX, in) != NULL) {
2000                 if (strends(fname, "\n"))
2001                         fname[strlen(fname)-1] = '\0';
2002                 read_symbols(fname);
2003         }
2004
2005         if (in != stdin)
2006                 fclose(in);
2007 }
2008
2009 #define SZ 500
2010
2011 /* We first write the generated file into memory using the
2012  * following helper, then compare to the file on disk and
2013  * only update the later if anything changed */
2014
2015 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2016                                                       const char *fmt, ...)
2017 {
2018         char tmp[SZ];
2019         int len;
2020         va_list ap;
2021
2022         va_start(ap, fmt);
2023         len = vsnprintf(tmp, SZ, fmt, ap);
2024         buf_write(buf, tmp, len);
2025         va_end(ap);
2026 }
2027
2028 void buf_write(struct buffer *buf, const char *s, int len)
2029 {
2030         if (buf->size - buf->pos < len) {
2031                 buf->size += len + SZ;
2032                 buf->p = realloc(buf->p, buf->size);
2033         }
2034         strncpy(buf->p + buf->pos, s, len);
2035         buf->pos += len;
2036 }
2037
2038 static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2039 {
2040         const char *e = is_vmlinux(m) ?"":".ko";
2041
2042         switch (exp) {
2043         case export_gpl:
2044                 fatal("modpost: GPL-incompatible module %s%s "
2045                       "uses GPL-only symbol '%s'\n", m, e, s);
2046                 break;
2047         case export_unused_gpl:
2048                 fatal("modpost: GPL-incompatible module %s%s "
2049                       "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);
2050                 break;
2051         case export_gpl_future:
2052                 warn("modpost: GPL-incompatible module %s%s "
2053                       "uses future GPL-only symbol '%s'\n", m, e, s);
2054                 break;
2055         case export_plain:
2056         case export_unused:
2057         case export_unknown:
2058                 /* ignore */
2059                 break;
2060         }
2061 }
2062
2063 static void check_for_unused(enum export exp, const char *m, const char *s)
2064 {
2065         const char *e = is_vmlinux(m) ?"":".ko";
2066
2067         switch (exp) {
2068         case export_unused:
2069         case export_unused_gpl:
2070                 warn("modpost: module %s%s "
2071                       "uses symbol '%s' marked UNUSED\n", m, e, s);
2072                 break;
2073         default:
2074                 /* ignore */
2075                 break;
2076         }
2077 }
2078
2079 static void check_exports(struct module *mod)
2080 {
2081         struct symbol *s, *exp;
2082
2083         for (s = mod->unres; s; s = s->next) {
2084                 const char *basename;
2085                 exp = find_symbol(s->name);
2086                 if (!exp || exp->module == mod)
2087                         continue;
2088                 basename = strrchr(mod->name, '/');
2089                 if (basename)
2090                         basename++;
2091                 else
2092                         basename = mod->name;
2093                 if (!mod->gpl_compatible)
2094                         check_for_gpl_usage(exp->export, basename, exp->name);
2095                 check_for_unused(exp->export, basename, exp->name);
2096         }
2097 }
2098
2099 /**
2100  * Header for the generated file
2101  **/
2102 static void add_header(struct buffer *b, struct module *mod)
2103 {
2104         buf_printf(b, "#include <linux/module.h>\n");
2105         buf_printf(b, "#include <linux/vermagic.h>\n");
2106         buf_printf(b, "#include <linux/compiler.h>\n");
2107         buf_printf(b, "\n");
2108         buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2109         buf_printf(b, "\n");
2110         buf_printf(b, "__visible struct module __this_module\n");
2111         buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
2112         buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2113         if (mod->has_init)
2114                 buf_printf(b, "\t.init = init_module,\n");
2115         if (mod->has_cleanup)
2116                 buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2117                               "\t.exit = cleanup_module,\n"
2118                               "#endif\n");
2119         buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2120         buf_printf(b, "};\n");
2121 }
2122
2123 static void add_intree_flag(struct buffer *b, int is_intree)
2124 {
2125         if (is_intree)
2126                 buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2127 }
2128
2129 static void add_staging_flag(struct buffer *b, const char *name)
2130 {
2131         static const char *staging_dir = "drivers/staging";
2132
2133         if (strncmp(staging_dir, name, strlen(staging_dir)) == 0)
2134                 buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2135 }
2136
2137 /* In kernel, this size is defined in linux/module.h;
2138  * here we use Elf_Addr instead of long for covering cross-compile
2139  */
2140 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
2141
2142 /**
2143  * Record CRCs for unresolved symbols
2144  **/
2145 static int add_versions(struct buffer *b, struct module *mod)
2146 {
2147         struct symbol *s, *exp;
2148         int err = 0;
2149
2150         for (s = mod->unres; s; s = s->next) {
2151                 exp = find_symbol(s->name);
2152                 if (!exp || exp->module == mod) {
2153                         if (have_vmlinux && !s->weak) {
2154                                 if (warn_unresolved) {
2155                                         warn("\"%s\" [%s.ko] undefined!\n",
2156                                              s->name, mod->name);
2157                                 } else {
2158                                         merror("\"%s\" [%s.ko] undefined!\n",
2159                                                s->name, mod->name);
2160                                         err = 1;
2161                                 }
2162                         }
2163                         continue;
2164                 }
2165                 s->module = exp->module;
2166                 s->crc_valid = exp->crc_valid;
2167                 s->crc = exp->crc;
2168         }
2169
2170         if (!modversions)
2171                 return err;
2172
2173         buf_printf(b, "\n");
2174         buf_printf(b, "static const struct modversion_info ____versions[]\n");
2175         buf_printf(b, "__used\n");
2176         buf_printf(b, "__attribute__((section(\"__versions\"))) = {\n");
2177
2178         for (s = mod->unres; s; s = s->next) {
2179                 if (!s->module)
2180                         continue;
2181                 if (!s->crc_valid) {
2182                         warn("\"%s\" [%s.ko] has no CRC!\n",
2183                                 s->name, mod->name);
2184                         continue;
2185                 }
2186                 if (strlen(s->name) >= MODULE_NAME_LEN) {
2187                         merror("too long symbol \"%s\" [%s.ko]\n",
2188                                s->name, mod->name);
2189                         err = 1;
2190                         break;
2191                 }
2192                 buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
2193                            s->crc, s->name);
2194         }
2195
2196         buf_printf(b, "};\n");
2197
2198         return err;
2199 }
2200
2201 static void add_depends(struct buffer *b, struct module *mod,
2202                         struct module *modules)
2203 {
2204         struct symbol *s;
2205         struct module *m;
2206         int first = 1;
2207
2208         for (m = modules; m; m = m->next)
2209                 m->seen = is_vmlinux(m->name);
2210
2211         buf_printf(b, "\n");
2212         buf_printf(b, "static const char __module_depends[]\n");
2213         buf_printf(b, "__used\n");
2214         buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
2215         buf_printf(b, "\"depends=");
2216         for (s = mod->unres; s; s = s->next) {
2217                 const char *p;
2218                 if (!s->module)
2219                         continue;
2220
2221                 if (s->module->seen)
2222                         continue;
2223
2224                 s->module->seen = 1;
2225                 p = strrchr(s->module->name, '/');
2226                 if (p)
2227                         p++;
2228                 else
2229                         p = s->module->name;
2230                 buf_printf(b, "%s%s", first ? "" : ",", p);
2231                 first = 0;
2232         }
2233         buf_printf(b, "\";\n");
2234 }
2235
2236 static void add_srcversion(struct buffer *b, struct module *mod)
2237 {
2238         if (mod->srcversion[0]) {
2239                 buf_printf(b, "\n");
2240                 buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2241                            mod->srcversion);
2242         }
2243 }
2244
2245 static void write_if_changed(struct buffer *b, const char *fname)
2246 {
2247         char *tmp;
2248         FILE *file;
2249         struct stat st;
2250
2251         file = fopen(fname, "r");
2252         if (!file)
2253                 goto write;
2254
2255         if (fstat(fileno(file), &st) < 0)
2256                 goto close_write;
2257
2258         if (st.st_size != b->pos)
2259                 goto close_write;
2260
2261         tmp = NOFAIL(malloc(b->pos));
2262         if (fread(tmp, 1, b->pos, file) != b->pos)
2263                 goto free_write;
2264
2265         if (memcmp(tmp, b->p, b->pos) != 0)
2266                 goto free_write;
2267
2268         free(tmp);
2269         fclose(file);
2270         return;
2271
2272  free_write:
2273         free(tmp);
2274  close_write:
2275         fclose(file);
2276  write:
2277         file = fopen(fname, "w");
2278         if (!file) {
2279                 perror(fname);
2280                 exit(1);
2281         }
2282         if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2283                 perror(fname);
2284                 exit(1);
2285         }
2286         fclose(file);
2287 }
2288
2289 /* parse Module.symvers file. line format:
2290  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2291  **/
2292 static void read_dump(const char *fname, unsigned int kernel)
2293 {
2294         unsigned long size, pos = 0;
2295         void *file = grab_file(fname, &size);
2296         char *line;
2297
2298         if (!file)
2299                 /* No symbol versions, silently ignore */
2300                 return;
2301
2302         while ((line = get_next_line(&pos, file, size))) {
2303                 char *symname, *modname, *d, *export, *end;
2304                 unsigned int crc;
2305                 struct module *mod;
2306                 struct symbol *s;
2307
2308                 if (!(symname = strchr(line, '\t')))
2309                         goto fail;
2310                 *symname++ = '\0';
2311                 if (!(modname = strchr(symname, '\t')))
2312                         goto fail;
2313                 *modname++ = '\0';
2314                 if ((export = strchr(modname, '\t')) != NULL)
2315                         *export++ = '\0';
2316                 if (export && ((end = strchr(export, '\t')) != NULL))
2317                         *end = '\0';
2318                 crc = strtoul(line, &d, 16);
2319                 if (*symname == '\0' || *modname == '\0' || *d != '\0')
2320                         goto fail;
2321                 mod = find_module(modname);
2322                 if (!mod) {
2323                         if (is_vmlinux(modname))
2324                                 have_vmlinux = 1;
2325                         mod = new_module(modname);
2326                         mod->skip = 1;
2327                 }
2328                 s = sym_add_exported(symname, mod, export_no(export));
2329                 s->kernel    = kernel;
2330                 s->preloaded = 1;
2331                 sym_update_crc(symname, mod, crc, export_no(export));
2332         }
2333         release_file(file, size);
2334         return;
2335 fail:
2336         release_file(file, size);
2337         fatal("parse error in symbol dump file\n");
2338 }
2339
2340 /* For normal builds always dump all symbols.
2341  * For external modules only dump symbols
2342  * that are not read from kernel Module.symvers.
2343  **/
2344 static int dump_sym(struct symbol *sym)
2345 {
2346         if (!external_module)
2347                 return 1;
2348         if (sym->vmlinux || sym->kernel)
2349                 return 0;
2350         return 1;
2351 }
2352
2353 static void write_dump(const char *fname)
2354 {
2355         struct buffer buf = { };
2356         struct symbol *symbol;
2357         int n;
2358
2359         for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2360                 symbol = symbolhash[n];
2361                 while (symbol) {
2362                         if (dump_sym(symbol))
2363                                 buf_printf(&buf, "0x%08x\t%s\t%s\t%s\n",
2364                                         symbol->crc, symbol->name,
2365                                         symbol->module->name,
2366                                         export_str(symbol->export));
2367                         symbol = symbol->next;
2368                 }
2369         }
2370         write_if_changed(&buf, fname);
2371 }
2372
2373 struct ext_sym_list {
2374         struct ext_sym_list *next;
2375         const char *file;
2376 };
2377
2378 int main(int argc, char **argv)
2379 {
2380         struct module *mod;
2381         struct buffer buf = { };
2382         char *kernel_read = NULL, *module_read = NULL;
2383         char *dump_write = NULL, *files_source = NULL;
2384         int opt;
2385         int err;
2386         struct ext_sym_list *extsym_iter;
2387         struct ext_sym_list *extsym_start = NULL;
2388
2389         while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) {
2390                 switch (opt) {
2391                 case 'i':
2392                         kernel_read = optarg;
2393                         break;
2394                 case 'I':
2395                         module_read = optarg;
2396                         external_module = 1;
2397                         break;
2398                 case 'e':
2399                         external_module = 1;
2400                         extsym_iter =
2401                            NOFAIL(malloc(sizeof(*extsym_iter)));
2402                         extsym_iter->next = extsym_start;
2403                         extsym_iter->file = optarg;
2404                         extsym_start = extsym_iter;
2405                         break;
2406                 case 'm':
2407                         modversions = 1;
2408                         break;
2409                 case 'n':
2410                         ignore_missing_files = 1;
2411                         break;
2412                 case 'o':
2413                         dump_write = optarg;
2414                         break;
2415                 case 'a':
2416                         all_versions = 1;
2417                         break;
2418                 case 's':
2419                         vmlinux_section_warnings = 0;
2420                         break;
2421                 case 'S':
2422                         sec_mismatch_verbose = 0;
2423                         break;
2424                 case 'T':
2425                         files_source = optarg;
2426                         break;
2427                 case 'w':
2428                         warn_unresolved = 1;
2429                         break;
2430                 case 'E':
2431                         sec_mismatch_fatal = 1;
2432                         break;
2433                 default:
2434                         exit(1);
2435                 }
2436         }
2437
2438         if (kernel_read)
2439                 read_dump(kernel_read, 1);
2440         if (module_read)
2441                 read_dump(module_read, 0);
2442         while (extsym_start) {
2443                 read_dump(extsym_start->file, 0);
2444                 extsym_iter = extsym_start->next;
2445                 free(extsym_start);
2446                 extsym_start = extsym_iter;
2447         }
2448
2449         while (optind < argc)
2450                 read_symbols(argv[optind++]);
2451
2452         if (files_source)
2453                 read_symbols_from_files(files_source);
2454
2455         for (mod = modules; mod; mod = mod->next) {
2456                 if (mod->skip)
2457                         continue;
2458                 check_exports(mod);
2459         }
2460
2461         err = 0;
2462
2463         for (mod = modules; mod; mod = mod->next) {
2464                 char fname[PATH_MAX];
2465
2466                 if (mod->skip)
2467                         continue;
2468
2469                 buf.pos = 0;
2470
2471                 add_header(&buf, mod);
2472                 add_intree_flag(&buf, !external_module);
2473                 add_staging_flag(&buf, mod->name);
2474                 err |= add_versions(&buf, mod);
2475                 add_depends(&buf, mod, modules);
2476                 add_moddevtable(&buf, mod);
2477                 add_srcversion(&buf, mod);
2478
2479                 sprintf(fname, "%s.mod.c", mod->name);
2480                 write_if_changed(&buf, fname);
2481         }
2482         if (dump_write)
2483                 write_dump(dump_write);
2484         if (sec_mismatch_count) {
2485                 if (!sec_mismatch_verbose) {
2486                         warn("modpost: Found %d section mismatch(es).\n"
2487                              "To see full details build your kernel with:\n"
2488                              "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
2489                              sec_mismatch_count);
2490                 }
2491                 if (sec_mismatch_fatal) {
2492                         fatal("modpost: Section mismatches detected.\n"
2493                               "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2494                 }
2495         }
2496
2497         return err;
2498 }