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