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