xref: /openbmc/linux/scripts/mod/modpost.c (revision 12cecbf9)
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 
26 /* Are we using CONFIG_MODVERSIONS? */
27 static bool modversions;
28 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
29 static bool all_versions;
30 /* If we are modposting external module set to 1 */
31 static bool external_module;
32 /* Only warn about unresolved symbols */
33 static bool warn_unresolved;
34 
35 static int sec_mismatch_count;
36 static bool sec_mismatch_warn_only = true;
37 /* ignore missing files */
38 static bool ignore_missing_files;
39 /* If set to 1, only warn (instead of error) about missing ns imports */
40 static bool allow_missing_ns_imports;
41 
42 static bool error_occurred;
43 
44 /*
45  * Cut off the warnings when there are too many. This typically occurs when
46  * vmlinux is missing. ('make modules' without building vmlinux.)
47  */
48 #define MAX_UNRESOLVED_REPORTS	10
49 static unsigned int nr_unresolved;
50 
51 /* In kernel, this size is defined in linux/module.h;
52  * here we use Elf_Addr instead of long for covering cross-compile
53  */
54 
55 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
56 
57 void __attribute__((format(printf, 2, 3)))
58 modpost_log(enum loglevel loglevel, const char *fmt, ...)
59 {
60 	va_list arglist;
61 
62 	switch (loglevel) {
63 	case LOG_WARN:
64 		fprintf(stderr, "WARNING: ");
65 		break;
66 	case LOG_ERROR:
67 		fprintf(stderr, "ERROR: ");
68 		break;
69 	case LOG_FATAL:
70 		fprintf(stderr, "FATAL: ");
71 		break;
72 	default: /* invalid loglevel, ignore */
73 		break;
74 	}
75 
76 	fprintf(stderr, "modpost: ");
77 
78 	va_start(arglist, fmt);
79 	vfprintf(stderr, fmt, arglist);
80 	va_end(arglist);
81 
82 	if (loglevel == LOG_FATAL)
83 		exit(1);
84 	if (loglevel == LOG_ERROR)
85 		error_occurred = true;
86 }
87 
88 static inline bool strends(const char *str, const char *postfix)
89 {
90 	if (strlen(str) < strlen(postfix))
91 		return false;
92 
93 	return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
94 }
95 
96 void *do_nofail(void *ptr, const char *expr)
97 {
98 	if (!ptr)
99 		fatal("Memory allocation failure: %s.\n", expr);
100 
101 	return ptr;
102 }
103 
104 char *read_text_file(const char *filename)
105 {
106 	struct stat st;
107 	size_t nbytes;
108 	int fd;
109 	char *buf;
110 
111 	fd = open(filename, O_RDONLY);
112 	if (fd < 0) {
113 		perror(filename);
114 		exit(1);
115 	}
116 
117 	if (fstat(fd, &st) < 0) {
118 		perror(filename);
119 		exit(1);
120 	}
121 
122 	buf = NOFAIL(malloc(st.st_size + 1));
123 
124 	nbytes = st.st_size;
125 
126 	while (nbytes) {
127 		ssize_t bytes_read;
128 
129 		bytes_read = read(fd, buf, nbytes);
130 		if (bytes_read < 0) {
131 			perror(filename);
132 			exit(1);
133 		}
134 
135 		nbytes -= bytes_read;
136 	}
137 	buf[st.st_size] = '\0';
138 
139 	close(fd);
140 
141 	return buf;
142 }
143 
144 char *get_line(char **stringp)
145 {
146 	char *orig = *stringp, *next;
147 
148 	/* do not return the unwanted extra line at EOF */
149 	if (!orig || *orig == '\0')
150 		return NULL;
151 
152 	/* don't use strsep here, it is not available everywhere */
153 	next = strchr(orig, '\n');
154 	if (next)
155 		*next++ = '\0';
156 
157 	*stringp = next;
158 
159 	return orig;
160 }
161 
162 /* A list of all modules we processed */
163 LIST_HEAD(modules);
164 
165 static struct module *find_module(const char *modname)
166 {
167 	struct module *mod;
168 
169 	list_for_each_entry(mod, &modules, list) {
170 		if (strcmp(mod->name, modname) == 0)
171 			return mod;
172 	}
173 	return NULL;
174 }
175 
176 static struct module *new_module(const char *name, size_t namelen)
177 {
178 	struct module *mod;
179 
180 	mod = NOFAIL(malloc(sizeof(*mod) + namelen + 1));
181 	memset(mod, 0, sizeof(*mod));
182 
183 	INIT_LIST_HEAD(&mod->exported_symbols);
184 	INIT_LIST_HEAD(&mod->unresolved_symbols);
185 	INIT_LIST_HEAD(&mod->missing_namespaces);
186 	INIT_LIST_HEAD(&mod->imported_namespaces);
187 
188 	memcpy(mod->name, name, namelen);
189 	mod->name[namelen] = '\0';
190 	mod->is_vmlinux = (strcmp(mod->name, "vmlinux") == 0);
191 
192 	/*
193 	 * Set mod->is_gpl_compatible to true by default. If MODULE_LICENSE()
194 	 * is missing, do not check the use for EXPORT_SYMBOL_GPL() becasue
195 	 * modpost will exit wiht error anyway.
196 	 */
197 	mod->is_gpl_compatible = true;
198 
199 	list_add_tail(&mod->list, &modules);
200 
201 	return mod;
202 }
203 
204 /* A hash of all exported symbols,
205  * struct symbol is also used for lists of unresolved symbols */
206 
207 #define SYMBOL_HASH_SIZE 1024
208 
209 struct symbol {
210 	struct symbol *next;
211 	struct list_head list;	/* link to module::exported_symbols or module::unresolved_symbols */
212 	struct module *module;
213 	char *namespace;
214 	unsigned int crc;
215 	bool crc_valid;
216 	bool weak;
217 	bool is_gpl_only;	/* exported by EXPORT_SYMBOL_GPL */
218 	char name[];
219 };
220 
221 static struct symbol *symbolhash[SYMBOL_HASH_SIZE];
222 
223 /* This is based on the hash algorithm from gdbm, via tdb */
224 static inline unsigned int tdb_hash(const char *name)
225 {
226 	unsigned value;	/* Used to compute the hash value.  */
227 	unsigned   i;	/* Used to cycle through random values. */
228 
229 	/* Set the initial value from the key size. */
230 	for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++)
231 		value = (value + (((unsigned char *)name)[i] << (i*5 % 24)));
232 
233 	return (1103515243 * value + 12345);
234 }
235 
236 /**
237  * Allocate a new symbols for use in the hash of exported symbols or
238  * the list of unresolved symbols per module
239  **/
240 static struct symbol *alloc_symbol(const char *name)
241 {
242 	struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
243 
244 	memset(s, 0, sizeof(*s));
245 	strcpy(s->name, name);
246 
247 	return s;
248 }
249 
250 /* For the hash of exported symbols */
251 static void hash_add_symbol(struct symbol *sym)
252 {
253 	unsigned int hash;
254 
255 	hash = tdb_hash(sym->name) % SYMBOL_HASH_SIZE;
256 	sym->next = symbolhash[hash];
257 	symbolhash[hash] = sym;
258 }
259 
260 static void sym_add_unresolved(const char *name, struct module *mod, bool weak)
261 {
262 	struct symbol *sym;
263 
264 	sym = alloc_symbol(name);
265 	sym->weak = weak;
266 
267 	list_add_tail(&sym->list, &mod->unresolved_symbols);
268 }
269 
270 static struct symbol *sym_find_with_module(const char *name, struct module *mod)
271 {
272 	struct symbol *s;
273 
274 	/* For our purposes, .foo matches foo.  PPC64 needs this. */
275 	if (name[0] == '.')
276 		name++;
277 
278 	for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
279 		if (strcmp(s->name, name) == 0 && (!mod || s->module == mod))
280 			return s;
281 	}
282 	return NULL;
283 }
284 
285 static struct symbol *find_symbol(const char *name)
286 {
287 	return sym_find_with_module(name, NULL);
288 }
289 
290 struct namespace_list {
291 	struct list_head list;
292 	char namespace[];
293 };
294 
295 static bool contains_namespace(struct list_head *head, const char *namespace)
296 {
297 	struct namespace_list *list;
298 
299 	list_for_each_entry(list, head, list) {
300 		if (!strcmp(list->namespace, namespace))
301 			return true;
302 	}
303 
304 	return false;
305 }
306 
307 static void add_namespace(struct list_head *head, const char *namespace)
308 {
309 	struct namespace_list *ns_entry;
310 
311 	if (!contains_namespace(head, namespace)) {
312 		ns_entry = NOFAIL(malloc(sizeof(*ns_entry) +
313 					 strlen(namespace) + 1));
314 		strcpy(ns_entry->namespace, namespace);
315 		list_add_tail(&ns_entry->list, head);
316 	}
317 }
318 
319 static void *sym_get_data_by_offset(const struct elf_info *info,
320 				    unsigned int secindex, unsigned long offset)
321 {
322 	Elf_Shdr *sechdr = &info->sechdrs[secindex];
323 
324 	return (void *)info->hdr + sechdr->sh_offset + offset;
325 }
326 
327 void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)
328 {
329 	return sym_get_data_by_offset(info, get_secindex(info, sym),
330 				      sym->st_value);
331 }
332 
333 static const char *sech_name(const struct elf_info *info, Elf_Shdr *sechdr)
334 {
335 	return sym_get_data_by_offset(info, info->secindex_strings,
336 				      sechdr->sh_name);
337 }
338 
339 static const char *sec_name(const struct elf_info *info, unsigned int secindex)
340 {
341 	/*
342 	 * If sym->st_shndx is a special section index, there is no
343 	 * corresponding section header.
344 	 * Return "" if the index is out of range of info->sechdrs[] array.
345 	 */
346 	if (secindex >= info->num_sections)
347 		return "";
348 
349 	return sech_name(info, &info->sechdrs[secindex]);
350 }
351 
352 #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
353 
354 static void sym_update_namespace(const char *symname, const char *namespace)
355 {
356 	struct symbol *s = find_symbol(symname);
357 
358 	/*
359 	 * That symbol should have been created earlier and thus this is
360 	 * actually an assertion.
361 	 */
362 	if (!s) {
363 		error("Could not update namespace(%s) for symbol %s\n",
364 		      namespace, symname);
365 		return;
366 	}
367 
368 	free(s->namespace);
369 	s->namespace = namespace[0] ? NOFAIL(strdup(namespace)) : NULL;
370 }
371 
372 static struct symbol *sym_add_exported(const char *name, struct module *mod,
373 				       bool gpl_only)
374 {
375 	struct symbol *s = find_symbol(name);
376 
377 	if (s && (!external_module || s->module->is_vmlinux || s->module == mod)) {
378 		error("%s: '%s' exported twice. Previous export was in %s%s\n",
379 		      mod->name, name, s->module->name,
380 		      s->module->is_vmlinux ? "" : ".ko");
381 	}
382 
383 	s = alloc_symbol(name);
384 	s->module = mod;
385 	s->is_gpl_only = gpl_only;
386 	list_add_tail(&s->list, &mod->exported_symbols);
387 	hash_add_symbol(s);
388 
389 	return s;
390 }
391 
392 static void sym_set_crc(struct symbol *sym, unsigned int crc)
393 {
394 	sym->crc = crc;
395 	sym->crc_valid = true;
396 }
397 
398 static void *grab_file(const char *filename, size_t *size)
399 {
400 	struct stat st;
401 	void *map = MAP_FAILED;
402 	int fd;
403 
404 	fd = open(filename, O_RDONLY);
405 	if (fd < 0)
406 		return NULL;
407 	if (fstat(fd, &st))
408 		goto failed;
409 
410 	*size = st.st_size;
411 	map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
412 
413 failed:
414 	close(fd);
415 	if (map == MAP_FAILED)
416 		return NULL;
417 	return map;
418 }
419 
420 static void release_file(void *file, size_t size)
421 {
422 	munmap(file, size);
423 }
424 
425 static int parse_elf(struct elf_info *info, const char *filename)
426 {
427 	unsigned int i;
428 	Elf_Ehdr *hdr;
429 	Elf_Shdr *sechdrs;
430 	Elf_Sym  *sym;
431 	const char *secstrings;
432 	unsigned int symtab_idx = ~0U, symtab_shndx_idx = ~0U;
433 
434 	hdr = grab_file(filename, &info->size);
435 	if (!hdr) {
436 		if (ignore_missing_files) {
437 			fprintf(stderr, "%s: %s (ignored)\n", filename,
438 				strerror(errno));
439 			return 0;
440 		}
441 		perror(filename);
442 		exit(1);
443 	}
444 	info->hdr = hdr;
445 	if (info->size < sizeof(*hdr)) {
446 		/* file too small, assume this is an empty .o file */
447 		return 0;
448 	}
449 	/* Is this a valid ELF file? */
450 	if ((hdr->e_ident[EI_MAG0] != ELFMAG0) ||
451 	    (hdr->e_ident[EI_MAG1] != ELFMAG1) ||
452 	    (hdr->e_ident[EI_MAG2] != ELFMAG2) ||
453 	    (hdr->e_ident[EI_MAG3] != ELFMAG3)) {
454 		/* Not an ELF file - silently ignore it */
455 		return 0;
456 	}
457 	/* Fix endianness in ELF header */
458 	hdr->e_type      = TO_NATIVE(hdr->e_type);
459 	hdr->e_machine   = TO_NATIVE(hdr->e_machine);
460 	hdr->e_version   = TO_NATIVE(hdr->e_version);
461 	hdr->e_entry     = TO_NATIVE(hdr->e_entry);
462 	hdr->e_phoff     = TO_NATIVE(hdr->e_phoff);
463 	hdr->e_shoff     = TO_NATIVE(hdr->e_shoff);
464 	hdr->e_flags     = TO_NATIVE(hdr->e_flags);
465 	hdr->e_ehsize    = TO_NATIVE(hdr->e_ehsize);
466 	hdr->e_phentsize = TO_NATIVE(hdr->e_phentsize);
467 	hdr->e_phnum     = TO_NATIVE(hdr->e_phnum);
468 	hdr->e_shentsize = TO_NATIVE(hdr->e_shentsize);
469 	hdr->e_shnum     = TO_NATIVE(hdr->e_shnum);
470 	hdr->e_shstrndx  = TO_NATIVE(hdr->e_shstrndx);
471 	sechdrs = (void *)hdr + hdr->e_shoff;
472 	info->sechdrs = sechdrs;
473 
474 	/* modpost only works for relocatable objects */
475 	if (hdr->e_type != ET_REL)
476 		fatal("%s: not relocatable object.", filename);
477 
478 	/* Check if file offset is correct */
479 	if (hdr->e_shoff > info->size) {
480 		fatal("section header offset=%lu in file '%s' is bigger than filesize=%zu\n",
481 		      (unsigned long)hdr->e_shoff, filename, info->size);
482 		return 0;
483 	}
484 
485 	if (hdr->e_shnum == SHN_UNDEF) {
486 		/*
487 		 * There are more than 64k sections,
488 		 * read count from .sh_size.
489 		 */
490 		info->num_sections = TO_NATIVE(sechdrs[0].sh_size);
491 	}
492 	else {
493 		info->num_sections = hdr->e_shnum;
494 	}
495 	if (hdr->e_shstrndx == SHN_XINDEX) {
496 		info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link);
497 	}
498 	else {
499 		info->secindex_strings = hdr->e_shstrndx;
500 	}
501 
502 	/* Fix endianness in section headers */
503 	for (i = 0; i < info->num_sections; i++) {
504 		sechdrs[i].sh_name      = TO_NATIVE(sechdrs[i].sh_name);
505 		sechdrs[i].sh_type      = TO_NATIVE(sechdrs[i].sh_type);
506 		sechdrs[i].sh_flags     = TO_NATIVE(sechdrs[i].sh_flags);
507 		sechdrs[i].sh_addr      = TO_NATIVE(sechdrs[i].sh_addr);
508 		sechdrs[i].sh_offset    = TO_NATIVE(sechdrs[i].sh_offset);
509 		sechdrs[i].sh_size      = TO_NATIVE(sechdrs[i].sh_size);
510 		sechdrs[i].sh_link      = TO_NATIVE(sechdrs[i].sh_link);
511 		sechdrs[i].sh_info      = TO_NATIVE(sechdrs[i].sh_info);
512 		sechdrs[i].sh_addralign = TO_NATIVE(sechdrs[i].sh_addralign);
513 		sechdrs[i].sh_entsize   = TO_NATIVE(sechdrs[i].sh_entsize);
514 	}
515 	/* Find symbol table. */
516 	secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset;
517 	for (i = 1; i < info->num_sections; i++) {
518 		const char *secname;
519 		int nobits = sechdrs[i].sh_type == SHT_NOBITS;
520 
521 		if (!nobits && sechdrs[i].sh_offset > info->size) {
522 			fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
523 			      "sizeof(*hrd)=%zu\n", filename,
524 			      (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.unlikely", ".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", ".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 static inline int is_arm_mapping_symbol(const char *str)
1117 {
1118 	return str[0] == '$' &&
1119 	       (str[1] == 'a' || str[1] == 'd' || str[1] == 't' || str[1] == 'x')
1120 	       && (str[2] == '\0' || str[2] == '.');
1121 }
1122 
1123 /*
1124  * If there's no name there, ignore it; likewise, ignore it if it's
1125  * one of the magic symbols emitted used by current ARM tools.
1126  *
1127  * Otherwise if find_symbols_between() returns those symbols, they'll
1128  * fail the whitelist tests and cause lots of false alarms ... fixable
1129  * only by merging __exit and __init sections into __text, bloating
1130  * the kernel (which is especially evil on embedded platforms).
1131  */
1132 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1133 {
1134 	const char *name = elf->strtab + sym->st_name;
1135 
1136 	if (!name || !strlen(name))
1137 		return 0;
1138 	return !is_arm_mapping_symbol(name);
1139 }
1140 
1141 /**
1142  * Find symbol based on relocation record info.
1143  * In some cases the symbol supplied is a valid symbol so
1144  * return refsym. If st_name != 0 we assume this is a valid symbol.
1145  * In other cases the symbol needs to be looked up in the symbol table
1146  * based on section and address.
1147  *  **/
1148 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1149 				Elf_Sym *relsym)
1150 {
1151 	Elf_Sym *sym;
1152 	Elf_Sym *near = NULL;
1153 	Elf64_Sword distance = 20;
1154 	Elf64_Sword d;
1155 	unsigned int relsym_secindex;
1156 
1157 	if (relsym->st_name != 0)
1158 		return relsym;
1159 
1160 	relsym_secindex = get_secindex(elf, relsym);
1161 	for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1162 		if (get_secindex(elf, sym) != relsym_secindex)
1163 			continue;
1164 		if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1165 			continue;
1166 		if (!is_valid_name(elf, sym))
1167 			continue;
1168 		if (sym->st_value == addr)
1169 			return sym;
1170 		/* Find a symbol nearby - addr are maybe negative */
1171 		d = sym->st_value - addr;
1172 		if (d < 0)
1173 			d = addr - sym->st_value;
1174 		if (d < distance) {
1175 			distance = d;
1176 			near = sym;
1177 		}
1178 	}
1179 	/* We need a close match */
1180 	if (distance < 20)
1181 		return near;
1182 	else
1183 		return NULL;
1184 }
1185 
1186 /*
1187  * Find symbols before or equal addr and after addr - in the section sec.
1188  * If we find two symbols with equal offset prefer one with a valid name.
1189  * The ELF format may have a better way to detect what type of symbol
1190  * it is, but this works for now.
1191  **/
1192 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1193 				 const char *sec)
1194 {
1195 	Elf_Sym *sym;
1196 	Elf_Sym *near = NULL;
1197 	Elf_Addr distance = ~0;
1198 
1199 	for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1200 		const char *symsec;
1201 
1202 		if (is_shndx_special(sym->st_shndx))
1203 			continue;
1204 		symsec = sec_name(elf, get_secindex(elf, sym));
1205 		if (strcmp(symsec, sec) != 0)
1206 			continue;
1207 		if (!is_valid_name(elf, sym))
1208 			continue;
1209 		if (sym->st_value <= addr && addr - sym->st_value <= distance) {
1210 			distance = addr - sym->st_value;
1211 			near = sym;
1212 		}
1213 	}
1214 	return near;
1215 }
1216 
1217 static int is_function(Elf_Sym *sym)
1218 {
1219 	if (sym)
1220 		return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1221 	else
1222 		return -1;
1223 }
1224 
1225 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1226 {
1227 	switch (is_func) {
1228 	case 0:	*name = "variable"; *name_p = ""; break;
1229 	case 1:	*name = "function"; *name_p = "()"; break;
1230 	default: *name = "(unknown reference)"; *name_p = ""; break;
1231 	}
1232 }
1233 
1234 /*
1235  * Print a warning about a section mismatch.
1236  * Try to find symbols near it so user can find it.
1237  * Check whitelist before warning - it may be a false positive.
1238  */
1239 static void report_sec_mismatch(const char *modname,
1240 				const struct sectioncheck *mismatch,
1241 				const char *fromsec,
1242 				const char *fromsym,
1243 				const char *tosec, const char *tosym)
1244 {
1245 	sec_mismatch_count++;
1246 
1247 	switch (mismatch->mismatch) {
1248 	case TEXT_TO_ANY_INIT:
1249 	case DATA_TO_ANY_INIT:
1250 	case TEXT_TO_ANY_EXIT:
1251 	case DATA_TO_ANY_EXIT:
1252 	case XXXINIT_TO_SOME_INIT:
1253 	case XXXEXIT_TO_SOME_EXIT:
1254 	case ANY_INIT_TO_ANY_EXIT:
1255 	case ANY_EXIT_TO_ANY_INIT:
1256 		warn("%s: section mismatch in reference: %s (section: %s) -> %s (section: %s)\n",
1257 		     modname, fromsym, fromsec, tosym, tosec);
1258 		break;
1259 	case EXPORT_TO_INIT_EXIT:
1260 		warn("%s: EXPORT_SYMBOL used for init/exit symbol: %s (section: %s)\n",
1261 		     modname, tosym, tosec);
1262 		break;
1263 	case EXTABLE_TO_NON_TEXT:
1264 		fatal("There's a special handler for this mismatch type, we should never get here.\n");
1265 		break;
1266 	}
1267 }
1268 
1269 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1270 				     const struct sectioncheck* const mismatch,
1271 				     Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1272 {
1273 	const char *tosec;
1274 	Elf_Sym *to;
1275 	Elf_Sym *from;
1276 	const char *tosym;
1277 	const char *fromsym;
1278 
1279 	from = find_elf_symbol2(elf, r->r_offset, fromsec);
1280 	fromsym = sym_name(elf, from);
1281 
1282 	tosec = sec_name(elf, get_secindex(elf, sym));
1283 	to = find_elf_symbol(elf, r->r_addend, sym);
1284 	tosym = sym_name(elf, to);
1285 
1286 	/* check whitelist - we may ignore it */
1287 	if (secref_whitelist(mismatch,
1288 			     fromsec, fromsym, tosec, tosym)) {
1289 		report_sec_mismatch(modname, mismatch,
1290 				    fromsec, fromsym, tosec, tosym);
1291 	}
1292 }
1293 
1294 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1295 {
1296 	if (section_index > elf->num_sections)
1297 		fatal("section_index is outside elf->num_sections!\n");
1298 
1299 	return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1300 }
1301 
1302 /*
1303  * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1304  * to know the sizeof(struct exception_table_entry) for the target architecture.
1305  */
1306 static unsigned int extable_entry_size = 0;
1307 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1308 {
1309 	/*
1310 	 * If we're currently checking the second relocation within __ex_table,
1311 	 * that relocation offset tells us the offsetof(struct
1312 	 * exception_table_entry, fixup) which is equal to sizeof(struct
1313 	 * exception_table_entry) divided by two.  We use that to our advantage
1314 	 * since there's no portable way to get that size as every architecture
1315 	 * seems to go with different sized types.  Not pretty but better than
1316 	 * hard-coding the size for every architecture..
1317 	 */
1318 	if (!extable_entry_size)
1319 		extable_entry_size = r->r_offset * 2;
1320 }
1321 
1322 static inline bool is_extable_fault_address(Elf_Rela *r)
1323 {
1324 	/*
1325 	 * extable_entry_size is only discovered after we've handled the
1326 	 * _second_ relocation in __ex_table, so only abort when we're not
1327 	 * handling the first reloc and extable_entry_size is zero.
1328 	 */
1329 	if (r->r_offset && extable_entry_size == 0)
1330 		fatal("extable_entry size hasn't been discovered!\n");
1331 
1332 	return ((r->r_offset == 0) ||
1333 		(r->r_offset % extable_entry_size == 0));
1334 }
1335 
1336 #define is_second_extable_reloc(Start, Cur, Sec)			\
1337 	(((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1338 
1339 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1340 				    const struct sectioncheck* const mismatch,
1341 				    Elf_Rela* r, Elf_Sym* sym,
1342 				    const char* fromsec, const char* tosec)
1343 {
1344 	Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1345 	const char* fromsym_name = sym_name(elf, fromsym);
1346 	Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1347 	const char* tosym_name = sym_name(elf, tosym);
1348 	const char* from_pretty_name;
1349 	const char* from_pretty_name_p;
1350 	const char* to_pretty_name;
1351 	const char* to_pretty_name_p;
1352 
1353 	get_pretty_name(is_function(fromsym),
1354 			&from_pretty_name, &from_pretty_name_p);
1355 	get_pretty_name(is_function(tosym),
1356 			&to_pretty_name, &to_pretty_name_p);
1357 
1358 	warn("%s(%s+0x%lx): Section mismatch in reference"
1359 	     " from the %s %s%s to the %s %s:%s%s\n",
1360 	     modname, fromsec, (long)r->r_offset, from_pretty_name,
1361 	     fromsym_name, from_pretty_name_p,
1362 	     to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1363 
1364 	if (!match(tosec, mismatch->bad_tosec) &&
1365 	    is_executable_section(elf, get_secindex(elf, sym)))
1366 		fprintf(stderr,
1367 			"The relocation at %s+0x%lx references\n"
1368 			"section \"%s\" which is not in the list of\n"
1369 			"authorized sections.  If you're adding a new section\n"
1370 			"and/or if this reference is valid, add \"%s\" to the\n"
1371 			"list of authorized sections to jump to on fault.\n"
1372 			"This can be achieved by adding \"%s\" to \n"
1373 			"OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1374 			fromsec, (long)r->r_offset, tosec, tosec, tosec);
1375 }
1376 
1377 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1378 				     const struct sectioncheck* const mismatch,
1379 				     Elf_Rela* r, Elf_Sym* sym,
1380 				     const char *fromsec)
1381 {
1382 	const char* tosec = sec_name(elf, get_secindex(elf, sym));
1383 
1384 	sec_mismatch_count++;
1385 
1386 	report_extable_warnings(modname, elf, mismatch, r, sym, fromsec, tosec);
1387 
1388 	if (match(tosec, mismatch->bad_tosec))
1389 		fatal("The relocation at %s+0x%lx references\n"
1390 		      "section \"%s\" which is black-listed.\n"
1391 		      "Something is seriously wrong and should be fixed.\n"
1392 		      "You might get more information about where this is\n"
1393 		      "coming from by using scripts/check_extable.sh %s\n",
1394 		      fromsec, (long)r->r_offset, tosec, modname);
1395 	else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1396 		if (is_extable_fault_address(r))
1397 			fatal("The relocation at %s+0x%lx references\n"
1398 			      "section \"%s\" which is not executable, IOW\n"
1399 			      "it is not possible for the kernel to fault\n"
1400 			      "at that address.  Something is seriously wrong\n"
1401 			      "and should be fixed.\n",
1402 			      fromsec, (long)r->r_offset, tosec);
1403 		else
1404 			fatal("The relocation at %s+0x%lx references\n"
1405 			      "section \"%s\" which is not executable, IOW\n"
1406 			      "the kernel will fault if it ever tries to\n"
1407 			      "jump to it.  Something is seriously wrong\n"
1408 			      "and should be fixed.\n",
1409 			      fromsec, (long)r->r_offset, tosec);
1410 	}
1411 }
1412 
1413 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1414 				   Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1415 {
1416 	const char *tosec = sec_name(elf, get_secindex(elf, sym));
1417 	const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1418 
1419 	if (mismatch) {
1420 		if (mismatch->handler)
1421 			mismatch->handler(modname, elf,  mismatch,
1422 					  r, sym, fromsec);
1423 		else
1424 			default_mismatch_handler(modname, elf, mismatch,
1425 						 r, sym, fromsec);
1426 	}
1427 }
1428 
1429 static unsigned int *reloc_location(struct elf_info *elf,
1430 				    Elf_Shdr *sechdr, Elf_Rela *r)
1431 {
1432 	return sym_get_data_by_offset(elf, sechdr->sh_info, r->r_offset);
1433 }
1434 
1435 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1436 {
1437 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1438 	unsigned int *location = reloc_location(elf, sechdr, r);
1439 
1440 	switch (r_typ) {
1441 	case R_386_32:
1442 		r->r_addend = TO_NATIVE(*location);
1443 		break;
1444 	case R_386_PC32:
1445 		r->r_addend = TO_NATIVE(*location) + 4;
1446 		break;
1447 	}
1448 	return 0;
1449 }
1450 
1451 #ifndef R_ARM_CALL
1452 #define R_ARM_CALL	28
1453 #endif
1454 #ifndef R_ARM_JUMP24
1455 #define R_ARM_JUMP24	29
1456 #endif
1457 
1458 #ifndef	R_ARM_THM_CALL
1459 #define	R_ARM_THM_CALL		10
1460 #endif
1461 #ifndef	R_ARM_THM_JUMP24
1462 #define	R_ARM_THM_JUMP24	30
1463 #endif
1464 #ifndef	R_ARM_THM_JUMP19
1465 #define	R_ARM_THM_JUMP19	51
1466 #endif
1467 
1468 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1469 {
1470 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1471 
1472 	switch (r_typ) {
1473 	case R_ARM_ABS32:
1474 		/* From ARM ABI: (S + A) | T */
1475 		r->r_addend = (int)(long)
1476 			      (elf->symtab_start + ELF_R_SYM(r->r_info));
1477 		break;
1478 	case R_ARM_PC24:
1479 	case R_ARM_CALL:
1480 	case R_ARM_JUMP24:
1481 	case R_ARM_THM_CALL:
1482 	case R_ARM_THM_JUMP24:
1483 	case R_ARM_THM_JUMP19:
1484 		/* From ARM ABI: ((S + A) | T) - P */
1485 		r->r_addend = (int)(long)(elf->hdr +
1486 			      sechdr->sh_offset +
1487 			      (r->r_offset - sechdr->sh_addr));
1488 		break;
1489 	default:
1490 		return 1;
1491 	}
1492 	return 0;
1493 }
1494 
1495 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1496 {
1497 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1498 	unsigned int *location = reloc_location(elf, sechdr, r);
1499 	unsigned int inst;
1500 
1501 	if (r_typ == R_MIPS_HI16)
1502 		return 1;	/* skip this */
1503 	inst = TO_NATIVE(*location);
1504 	switch (r_typ) {
1505 	case R_MIPS_LO16:
1506 		r->r_addend = inst & 0xffff;
1507 		break;
1508 	case R_MIPS_26:
1509 		r->r_addend = (inst & 0x03ffffff) << 2;
1510 		break;
1511 	case R_MIPS_32:
1512 		r->r_addend = inst;
1513 		break;
1514 	}
1515 	return 0;
1516 }
1517 
1518 #ifndef EM_RISCV
1519 #define EM_RISCV		243
1520 #endif
1521 
1522 #ifndef R_RISCV_SUB32
1523 #define R_RISCV_SUB32		39
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 		}
1568 		sym = elf->symtab_start + r_sym;
1569 		/* Skip special sections */
1570 		if (is_shndx_special(sym->st_shndx))
1571 			continue;
1572 		if (is_second_extable_reloc(start, rela, fromsec))
1573 			find_extable_entry_size(fromsec, &r);
1574 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1575 	}
1576 }
1577 
1578 static void section_rel(const char *modname, struct elf_info *elf,
1579 			Elf_Shdr *sechdr)
1580 {
1581 	Elf_Sym *sym;
1582 	Elf_Rel *rel;
1583 	Elf_Rela r;
1584 	unsigned int r_sym;
1585 	const char *fromsec;
1586 
1587 	Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1588 	Elf_Rel *stop  = (void *)start + sechdr->sh_size;
1589 
1590 	fromsec = sec_name(elf, sechdr->sh_info);
1591 	/* if from section (name) is know good then skip it */
1592 	if (match(fromsec, section_white_list))
1593 		return;
1594 
1595 	for (rel = start; rel < stop; rel++) {
1596 		r.r_offset = TO_NATIVE(rel->r_offset);
1597 #if KERNEL_ELFCLASS == ELFCLASS64
1598 		if (elf->hdr->e_machine == EM_MIPS) {
1599 			unsigned int r_typ;
1600 			r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1601 			r_sym = TO_NATIVE(r_sym);
1602 			r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1603 			r.r_info = ELF64_R_INFO(r_sym, r_typ);
1604 		} else {
1605 			r.r_info = TO_NATIVE(rel->r_info);
1606 			r_sym = ELF_R_SYM(r.r_info);
1607 		}
1608 #else
1609 		r.r_info = TO_NATIVE(rel->r_info);
1610 		r_sym = ELF_R_SYM(r.r_info);
1611 #endif
1612 		r.r_addend = 0;
1613 		switch (elf->hdr->e_machine) {
1614 		case EM_386:
1615 			if (addend_386_rel(elf, sechdr, &r))
1616 				continue;
1617 			break;
1618 		case EM_ARM:
1619 			if (addend_arm_rel(elf, sechdr, &r))
1620 				continue;
1621 			break;
1622 		case EM_MIPS:
1623 			if (addend_mips_rel(elf, sechdr, &r))
1624 				continue;
1625 			break;
1626 		}
1627 		sym = elf->symtab_start + r_sym;
1628 		/* Skip special sections */
1629 		if (is_shndx_special(sym->st_shndx))
1630 			continue;
1631 		if (is_second_extable_reloc(start, rel, fromsec))
1632 			find_extable_entry_size(fromsec, &r);
1633 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1634 	}
1635 }
1636 
1637 /**
1638  * A module includes a number of sections that are discarded
1639  * either when loaded or when used as built-in.
1640  * For loaded modules all functions marked __init and all data
1641  * marked __initdata will be discarded when the module has been initialized.
1642  * Likewise for modules used built-in the sections marked __exit
1643  * are discarded because __exit marked function are supposed to be called
1644  * only when a module is unloaded which never happens for built-in modules.
1645  * The check_sec_ref() function traverses all relocation records
1646  * to find all references to a section that reference a section that will
1647  * be discarded and warns about it.
1648  **/
1649 static void check_sec_ref(const char *modname, struct elf_info *elf)
1650 {
1651 	int i;
1652 	Elf_Shdr *sechdrs = elf->sechdrs;
1653 
1654 	/* Walk through all sections */
1655 	for (i = 0; i < elf->num_sections; i++) {
1656 		check_section(modname, elf, &elf->sechdrs[i]);
1657 		/* We want to process only relocation sections and not .init */
1658 		if (sechdrs[i].sh_type == SHT_RELA)
1659 			section_rela(modname, elf, &elf->sechdrs[i]);
1660 		else if (sechdrs[i].sh_type == SHT_REL)
1661 			section_rel(modname, elf, &elf->sechdrs[i]);
1662 	}
1663 }
1664 
1665 static char *remove_dot(char *s)
1666 {
1667 	size_t n = strcspn(s, ".");
1668 
1669 	if (n && s[n]) {
1670 		size_t m = strspn(s + n + 1, "0123456789");
1671 		if (m && (s[n + m + 1] == '.' || s[n + m + 1] == 0))
1672 			s[n] = 0;
1673 	}
1674 	return s;
1675 }
1676 
1677 /*
1678  * The CRCs are recorded in .*.cmd files in the form of:
1679  * #SYMVER <name> <crc>
1680  */
1681 static void extract_crcs_for_object(const char *object, struct module *mod)
1682 {
1683 	char cmd_file[PATH_MAX];
1684 	char *buf, *p;
1685 	const char *base;
1686 	int dirlen, ret;
1687 
1688 	base = strrchr(object, '/');
1689 	if (base) {
1690 		base++;
1691 		dirlen = base - object;
1692 	} else {
1693 		dirlen = 0;
1694 		base = object;
1695 	}
1696 
1697 	ret = snprintf(cmd_file, sizeof(cmd_file), "%.*s.%s.cmd",
1698 		       dirlen, object, base);
1699 	if (ret >= sizeof(cmd_file)) {
1700 		error("%s: too long path was truncated\n", cmd_file);
1701 		return;
1702 	}
1703 
1704 	buf = read_text_file(cmd_file);
1705 	p = buf;
1706 
1707 	while ((p = strstr(p, "\n#SYMVER "))) {
1708 		char *name;
1709 		size_t namelen;
1710 		unsigned int crc;
1711 		struct symbol *sym;
1712 
1713 		name = p + strlen("\n#SYMVER ");
1714 
1715 		p = strchr(name, ' ');
1716 		if (!p)
1717 			break;
1718 
1719 		namelen = p - name;
1720 		p++;
1721 
1722 		if (!isdigit(*p))
1723 			continue;	/* skip this line */
1724 
1725 		crc = strtol(p, &p, 0);
1726 		if (*p != '\n')
1727 			continue;	/* skip this line */
1728 
1729 		name[namelen] = '\0';
1730 
1731 		/*
1732 		 * sym_find_with_module() may return NULL here.
1733 		 * It typically occurs when CONFIG_TRIM_UNUSED_KSYMS=y.
1734 		 * Since commit e1327a127703, genksyms calculates CRCs of all
1735 		 * symbols, including trimmed ones. Ignore orphan CRCs.
1736 		 */
1737 		sym = sym_find_with_module(name, mod);
1738 		if (sym)
1739 			sym_set_crc(sym, crc);
1740 	}
1741 
1742 	free(buf);
1743 }
1744 
1745 /*
1746  * The symbol versions (CRC) are recorded in the .*.cmd files.
1747  * Parse them to retrieve CRCs for the current module.
1748  */
1749 static void mod_set_crcs(struct module *mod)
1750 {
1751 	char objlist[PATH_MAX];
1752 	char *buf, *p, *obj;
1753 	int ret;
1754 
1755 	if (mod->is_vmlinux) {
1756 		strcpy(objlist, ".vmlinux.objs");
1757 	} else {
1758 		/* objects for a module are listed in the *.mod file. */
1759 		ret = snprintf(objlist, sizeof(objlist), "%s.mod", mod->name);
1760 		if (ret >= sizeof(objlist)) {
1761 			error("%s: too long path was truncated\n", objlist);
1762 			return;
1763 		}
1764 	}
1765 
1766 	buf = read_text_file(objlist);
1767 	p = buf;
1768 
1769 	while ((obj = strsep(&p, "\n")) && obj[0])
1770 		extract_crcs_for_object(obj, mod);
1771 
1772 	free(buf);
1773 }
1774 
1775 static void read_symbols(const char *modname)
1776 {
1777 	const char *symname;
1778 	char *version;
1779 	char *license;
1780 	char *namespace;
1781 	struct module *mod;
1782 	struct elf_info info = { };
1783 	Elf_Sym *sym;
1784 
1785 	if (!parse_elf(&info, modname))
1786 		return;
1787 
1788 	if (!strends(modname, ".o")) {
1789 		error("%s: filename must be suffixed with .o\n", modname);
1790 		return;
1791 	}
1792 
1793 	/* strip trailing .o */
1794 	mod = new_module(modname, strlen(modname) - strlen(".o"));
1795 
1796 	if (!mod->is_vmlinux) {
1797 		license = get_modinfo(&info, "license");
1798 		if (!license)
1799 			error("missing MODULE_LICENSE() in %s\n", modname);
1800 		while (license) {
1801 			if (!license_is_gpl_compatible(license)) {
1802 				mod->is_gpl_compatible = false;
1803 				break;
1804 			}
1805 			license = get_next_modinfo(&info, "license", license);
1806 		}
1807 
1808 		namespace = get_modinfo(&info, "import_ns");
1809 		while (namespace) {
1810 			add_namespace(&mod->imported_namespaces, namespace);
1811 			namespace = get_next_modinfo(&info, "import_ns",
1812 						     namespace);
1813 		}
1814 	}
1815 
1816 	for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1817 		symname = remove_dot(info.strtab + sym->st_name);
1818 
1819 		handle_symbol(mod, &info, sym, symname);
1820 		handle_moddevtable(mod, &info, sym, symname);
1821 	}
1822 
1823 	for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1824 		symname = remove_dot(info.strtab + sym->st_name);
1825 
1826 		/* Apply symbol namespaces from __kstrtabns_<symbol> entries. */
1827 		if (strstarts(symname, "__kstrtabns_"))
1828 			sym_update_namespace(symname + strlen("__kstrtabns_"),
1829 					     sym_get_data(&info, sym));
1830 	}
1831 
1832 	check_sec_ref(modname, &info);
1833 
1834 	if (!mod->is_vmlinux) {
1835 		version = get_modinfo(&info, "version");
1836 		if (version || all_versions)
1837 			get_src_version(mod->name, mod->srcversion,
1838 					sizeof(mod->srcversion) - 1);
1839 	}
1840 
1841 	parse_elf_finish(&info);
1842 
1843 	if (modversions) {
1844 		/*
1845 		 * Our trick to get versioning for module struct etc. - it's
1846 		 * never passed as an argument to an exported function, so
1847 		 * the automatic versioning doesn't pick it up, but it's really
1848 		 * important anyhow.
1849 		 */
1850 		sym_add_unresolved("module_layout", mod, false);
1851 
1852 		mod_set_crcs(mod);
1853 	}
1854 }
1855 
1856 static void read_symbols_from_files(const char *filename)
1857 {
1858 	FILE *in = stdin;
1859 	char fname[PATH_MAX];
1860 
1861 	if (strcmp(filename, "-") != 0) {
1862 		in = fopen(filename, "r");
1863 		if (!in)
1864 			fatal("Can't open filenames file %s: %m", filename);
1865 	}
1866 
1867 	while (fgets(fname, PATH_MAX, in) != NULL) {
1868 		if (strends(fname, "\n"))
1869 			fname[strlen(fname)-1] = '\0';
1870 		read_symbols(fname);
1871 	}
1872 
1873 	if (in != stdin)
1874 		fclose(in);
1875 }
1876 
1877 #define SZ 500
1878 
1879 /* We first write the generated file into memory using the
1880  * following helper, then compare to the file on disk and
1881  * only update the later if anything changed */
1882 
1883 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
1884 						      const char *fmt, ...)
1885 {
1886 	char tmp[SZ];
1887 	int len;
1888 	va_list ap;
1889 
1890 	va_start(ap, fmt);
1891 	len = vsnprintf(tmp, SZ, fmt, ap);
1892 	buf_write(buf, tmp, len);
1893 	va_end(ap);
1894 }
1895 
1896 void buf_write(struct buffer *buf, const char *s, int len)
1897 {
1898 	if (buf->size - buf->pos < len) {
1899 		buf->size += len + SZ;
1900 		buf->p = NOFAIL(realloc(buf->p, buf->size));
1901 	}
1902 	strncpy(buf->p + buf->pos, s, len);
1903 	buf->pos += len;
1904 }
1905 
1906 static void check_exports(struct module *mod)
1907 {
1908 	struct symbol *s, *exp;
1909 
1910 	list_for_each_entry(s, &mod->unresolved_symbols, list) {
1911 		const char *basename;
1912 		exp = find_symbol(s->name);
1913 		if (!exp) {
1914 			if (!s->weak && nr_unresolved++ < MAX_UNRESOLVED_REPORTS)
1915 				modpost_log(warn_unresolved ? LOG_WARN : LOG_ERROR,
1916 					    "\"%s\" [%s.ko] undefined!\n",
1917 					    s->name, mod->name);
1918 			continue;
1919 		}
1920 		if (exp->module == mod) {
1921 			error("\"%s\" [%s.ko] was exported without definition\n",
1922 			      s->name, mod->name);
1923 			continue;
1924 		}
1925 
1926 		s->module = exp->module;
1927 		s->crc_valid = exp->crc_valid;
1928 		s->crc = exp->crc;
1929 
1930 		basename = strrchr(mod->name, '/');
1931 		if (basename)
1932 			basename++;
1933 		else
1934 			basename = mod->name;
1935 
1936 		if (exp->namespace &&
1937 		    !contains_namespace(&mod->imported_namespaces, exp->namespace)) {
1938 			modpost_log(allow_missing_ns_imports ? LOG_WARN : LOG_ERROR,
1939 				    "module %s uses symbol %s from namespace %s, but does not import it.\n",
1940 				    basename, exp->name, exp->namespace);
1941 			add_namespace(&mod->missing_namespaces, exp->namespace);
1942 		}
1943 
1944 		if (!mod->is_gpl_compatible && exp->is_gpl_only)
1945 			error("GPL-incompatible module %s.ko uses GPL-only symbol '%s'\n",
1946 			      basename, exp->name);
1947 	}
1948 }
1949 
1950 static void check_modname_len(struct module *mod)
1951 {
1952 	const char *mod_name;
1953 
1954 	mod_name = strrchr(mod->name, '/');
1955 	if (mod_name == NULL)
1956 		mod_name = mod->name;
1957 	else
1958 		mod_name++;
1959 	if (strlen(mod_name) >= MODULE_NAME_LEN)
1960 		error("module name is too long [%s.ko]\n", mod->name);
1961 }
1962 
1963 /**
1964  * Header for the generated file
1965  **/
1966 static void add_header(struct buffer *b, struct module *mod)
1967 {
1968 	buf_printf(b, "#include <linux/module.h>\n");
1969 	/*
1970 	 * Include build-salt.h after module.h in order to
1971 	 * inherit the definitions.
1972 	 */
1973 	buf_printf(b, "#define INCLUDE_VERMAGIC\n");
1974 	buf_printf(b, "#include <linux/build-salt.h>\n");
1975 	buf_printf(b, "#include <linux/elfnote-lto.h>\n");
1976 	buf_printf(b, "#include <linux/export-internal.h>\n");
1977 	buf_printf(b, "#include <linux/vermagic.h>\n");
1978 	buf_printf(b, "#include <linux/compiler.h>\n");
1979 	buf_printf(b, "\n");
1980 	buf_printf(b, "BUILD_SALT;\n");
1981 	buf_printf(b, "BUILD_LTO_INFO;\n");
1982 	buf_printf(b, "\n");
1983 	buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
1984 	buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
1985 	buf_printf(b, "\n");
1986 	buf_printf(b, "__visible struct module __this_module\n");
1987 	buf_printf(b, "__section(\".gnu.linkonce.this_module\") = {\n");
1988 	buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
1989 	if (mod->has_init)
1990 		buf_printf(b, "\t.init = init_module,\n");
1991 	if (mod->has_cleanup)
1992 		buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
1993 			      "\t.exit = cleanup_module,\n"
1994 			      "#endif\n");
1995 	buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
1996 	buf_printf(b, "};\n");
1997 
1998 	if (!external_module)
1999 		buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2000 
2001 	buf_printf(b,
2002 		   "\n"
2003 		   "#ifdef CONFIG_RETPOLINE\n"
2004 		   "MODULE_INFO(retpoline, \"Y\");\n"
2005 		   "#endif\n");
2006 
2007 	if (strstarts(mod->name, "drivers/staging"))
2008 		buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2009 
2010 	if (strstarts(mod->name, "tools/testing"))
2011 		buf_printf(b, "\nMODULE_INFO(test, \"Y\");\n");
2012 }
2013 
2014 static void add_exported_symbols(struct buffer *buf, struct module *mod)
2015 {
2016 	struct symbol *sym;
2017 
2018 	if (!modversions)
2019 		return;
2020 
2021 	/* record CRCs for exported symbols */
2022 	buf_printf(buf, "\n");
2023 	list_for_each_entry(sym, &mod->exported_symbols, list) {
2024 		if (!sym->crc_valid) {
2025 			warn("EXPORT symbol \"%s\" [%s%s] version generation failed, symbol will not be versioned.\n"
2026 			     "Is \"%s\" prototyped in <asm/asm-prototypes.h>?\n",
2027 			     sym->name, mod->name, mod->is_vmlinux ? "" : ".ko",
2028 			     sym->name);
2029 			continue;
2030 		}
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 }
2410