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