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