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