xref: /openbmc/linux/scripts/mod/modpost.c (revision 160b8e75)
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",	/* mn10300 */
844 	".GCC.command.line",	/* record-gcc-switches, non mn10300 */
845 	".mdebug*",        /* alpha, score, mips etc. */
846 	".pdr",            /* alpha, score, mips etc. */
847 	".stab*",
848 	".note*",
849 	".got*",
850 	".toc*",
851 	".xt.prop",				 /* xtensa */
852 	".xt.lit",         /* xtensa */
853 	".arcextmap*",			/* arc */
854 	".gnu.linkonce.arcext*",	/* arc : modules */
855 	".cmem*",			/* EZchip */
856 	".fmt_slot*",			/* EZchip */
857 	".gnu.lto*",
858 	".discard.*",
859 	NULL
860 };
861 
862 /*
863  * This is used to find sections missing the SHF_ALLOC flag.
864  * The cause of this is often a section specified in assembler
865  * without "ax" / "aw".
866  */
867 static void check_section(const char *modname, struct elf_info *elf,
868 			  Elf_Shdr *sechdr)
869 {
870 	const char *sec = sech_name(elf, sechdr);
871 
872 	if (sechdr->sh_type == SHT_PROGBITS &&
873 	    !(sechdr->sh_flags & SHF_ALLOC) &&
874 	    !match(sec, section_white_list)) {
875 		warn("%s (%s): unexpected non-allocatable section.\n"
876 		     "Did you forget to use \"ax\"/\"aw\" in a .S file?\n"
877 		     "Note that for example <linux/init.h> contains\n"
878 		     "section definitions for use in .S files.\n\n",
879 		     modname, sec);
880 	}
881 }
882 
883 
884 
885 #define ALL_INIT_DATA_SECTIONS \
886 	".init.setup", ".init.rodata", ".meminit.rodata", \
887 	".init.data", ".meminit.data"
888 #define ALL_EXIT_DATA_SECTIONS \
889 	".exit.data", ".memexit.data"
890 
891 #define ALL_INIT_TEXT_SECTIONS \
892 	".init.text", ".meminit.text"
893 #define ALL_EXIT_TEXT_SECTIONS \
894 	".exit.text", ".memexit.text"
895 
896 #define ALL_PCI_INIT_SECTIONS	\
897 	".pci_fixup_early", ".pci_fixup_header", ".pci_fixup_final", \
898 	".pci_fixup_enable", ".pci_fixup_resume", \
899 	".pci_fixup_resume_early", ".pci_fixup_suspend"
900 
901 #define ALL_XXXINIT_SECTIONS MEM_INIT_SECTIONS
902 #define ALL_XXXEXIT_SECTIONS MEM_EXIT_SECTIONS
903 
904 #define ALL_INIT_SECTIONS INIT_SECTIONS, ALL_XXXINIT_SECTIONS
905 #define ALL_EXIT_SECTIONS EXIT_SECTIONS, ALL_XXXEXIT_SECTIONS
906 
907 #define DATA_SECTIONS ".data", ".data.rel"
908 #define TEXT_SECTIONS ".text", ".text.unlikely", ".sched.text", \
909 		".kprobes.text", ".cpuidle.text"
910 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
911 		".fixup", ".entry.text", ".exception.text", ".text.*", \
912 		".coldtext"
913 
914 #define INIT_SECTIONS      ".init.*"
915 #define MEM_INIT_SECTIONS  ".meminit.*"
916 
917 #define EXIT_SECTIONS      ".exit.*"
918 #define MEM_EXIT_SECTIONS  ".memexit.*"
919 
920 #define ALL_TEXT_SECTIONS  ALL_INIT_TEXT_SECTIONS, ALL_EXIT_TEXT_SECTIONS, \
921 		TEXT_SECTIONS, OTHER_TEXT_SECTIONS
922 
923 /* init data sections */
924 static const char *const init_data_sections[] =
925 	{ ALL_INIT_DATA_SECTIONS, NULL };
926 
927 /* all init sections */
928 static const char *const init_sections[] = { ALL_INIT_SECTIONS, NULL };
929 
930 /* All init and exit sections (code + data) */
931 static const char *const init_exit_sections[] =
932 	{ALL_INIT_SECTIONS, ALL_EXIT_SECTIONS, NULL };
933 
934 /* all text sections */
935 static const char *const text_sections[] = { ALL_TEXT_SECTIONS, NULL };
936 
937 /* data section */
938 static const char *const data_sections[] = { DATA_SECTIONS, NULL };
939 
940 
941 /* symbols in .data that may refer to init/exit sections */
942 #define DEFAULT_SYMBOL_WHITE_LIST					\
943 	"*driver",							\
944 	"*_template", /* scsi uses *_template a lot */			\
945 	"*_timer",    /* arm uses ops structures named _timer a lot */	\
946 	"*_sht",      /* scsi also used *_sht to some extent */		\
947 	"*_ops",							\
948 	"*_probe",							\
949 	"*_probe_one",							\
950 	"*_console"
951 
952 static const char *const head_sections[] = { ".head.text*", NULL };
953 static const char *const linker_symbols[] =
954 	{ "__init_begin", "_sinittext", "_einittext", NULL };
955 static const char *const optim_symbols[] = { "*.constprop.*", NULL };
956 
957 enum mismatch {
958 	TEXT_TO_ANY_INIT,
959 	DATA_TO_ANY_INIT,
960 	TEXT_TO_ANY_EXIT,
961 	DATA_TO_ANY_EXIT,
962 	XXXINIT_TO_SOME_INIT,
963 	XXXEXIT_TO_SOME_EXIT,
964 	ANY_INIT_TO_ANY_EXIT,
965 	ANY_EXIT_TO_ANY_INIT,
966 	EXPORT_TO_INIT_EXIT,
967 	EXTABLE_TO_NON_TEXT,
968 };
969 
970 /**
971  * Describe how to match sections on different criterias:
972  *
973  * @fromsec: Array of sections to be matched.
974  *
975  * @bad_tosec: Relocations applied to a section in @fromsec to a section in
976  * this array is forbidden (black-list).  Can be empty.
977  *
978  * @good_tosec: Relocations applied to a section in @fromsec must be
979  * targetting sections in this array (white-list).  Can be empty.
980  *
981  * @mismatch: Type of mismatch.
982  *
983  * @symbol_white_list: Do not match a relocation to a symbol in this list
984  * even if it is targetting a section in @bad_to_sec.
985  *
986  * @handler: Specific handler to call when a match is found.  If NULL,
987  * default_mismatch_handler() will be called.
988  *
989  */
990 struct sectioncheck {
991 	const char *fromsec[20];
992 	const char *bad_tosec[20];
993 	const char *good_tosec[20];
994 	enum mismatch mismatch;
995 	const char *symbol_white_list[20];
996 	void (*handler)(const char *modname, struct elf_info *elf,
997 			const struct sectioncheck* const mismatch,
998 			Elf_Rela *r, Elf_Sym *sym, const char *fromsec);
999 
1000 };
1001 
1002 static void extable_mismatch_handler(const char *modname, struct elf_info *elf,
1003 				     const struct sectioncheck* const mismatch,
1004 				     Elf_Rela *r, Elf_Sym *sym,
1005 				     const char *fromsec);
1006 
1007 static const struct sectioncheck sectioncheck[] = {
1008 /* Do not reference init/exit code/data from
1009  * normal code and data
1010  */
1011 {
1012 	.fromsec = { TEXT_SECTIONS, NULL },
1013 	.bad_tosec = { ALL_INIT_SECTIONS, NULL },
1014 	.mismatch = TEXT_TO_ANY_INIT,
1015 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1016 },
1017 {
1018 	.fromsec = { DATA_SECTIONS, NULL },
1019 	.bad_tosec = { ALL_XXXINIT_SECTIONS, NULL },
1020 	.mismatch = DATA_TO_ANY_INIT,
1021 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1022 },
1023 {
1024 	.fromsec = { DATA_SECTIONS, NULL },
1025 	.bad_tosec = { INIT_SECTIONS, NULL },
1026 	.mismatch = DATA_TO_ANY_INIT,
1027 	.symbol_white_list = {
1028 		"*_template", "*_timer", "*_sht", "*_ops",
1029 		"*_probe", "*_probe_one", "*_console", NULL
1030 	},
1031 },
1032 {
1033 	.fromsec = { TEXT_SECTIONS, NULL },
1034 	.bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1035 	.mismatch = TEXT_TO_ANY_EXIT,
1036 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1037 },
1038 {
1039 	.fromsec = { DATA_SECTIONS, NULL },
1040 	.bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1041 	.mismatch = DATA_TO_ANY_EXIT,
1042 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1043 },
1044 /* Do not reference init code/data from meminit code/data */
1045 {
1046 	.fromsec = { ALL_XXXINIT_SECTIONS, NULL },
1047 	.bad_tosec = { INIT_SECTIONS, NULL },
1048 	.mismatch = XXXINIT_TO_SOME_INIT,
1049 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1050 },
1051 /* Do not reference exit code/data from memexit code/data */
1052 {
1053 	.fromsec = { ALL_XXXEXIT_SECTIONS, NULL },
1054 	.bad_tosec = { EXIT_SECTIONS, NULL },
1055 	.mismatch = XXXEXIT_TO_SOME_EXIT,
1056 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1057 },
1058 /* Do not use exit code/data from init code */
1059 {
1060 	.fromsec = { ALL_INIT_SECTIONS, NULL },
1061 	.bad_tosec = { ALL_EXIT_SECTIONS, NULL },
1062 	.mismatch = ANY_INIT_TO_ANY_EXIT,
1063 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1064 },
1065 /* Do not use init code/data from exit code */
1066 {
1067 	.fromsec = { ALL_EXIT_SECTIONS, NULL },
1068 	.bad_tosec = { ALL_INIT_SECTIONS, NULL },
1069 	.mismatch = ANY_EXIT_TO_ANY_INIT,
1070 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1071 },
1072 {
1073 	.fromsec = { ALL_PCI_INIT_SECTIONS, NULL },
1074 	.bad_tosec = { INIT_SECTIONS, NULL },
1075 	.mismatch = ANY_INIT_TO_ANY_EXIT,
1076 	.symbol_white_list = { NULL },
1077 },
1078 /* Do not export init/exit functions or data */
1079 {
1080 	.fromsec = { "__ksymtab*", NULL },
1081 	.bad_tosec = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
1082 	.mismatch = EXPORT_TO_INIT_EXIT,
1083 	.symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
1084 },
1085 {
1086 	.fromsec = { "__ex_table", NULL },
1087 	/* If you're adding any new black-listed sections in here, consider
1088 	 * adding a special 'printer' for them in scripts/check_extable.
1089 	 */
1090 	.bad_tosec = { ".altinstr_replacement", NULL },
1091 	.good_tosec = {ALL_TEXT_SECTIONS , NULL},
1092 	.mismatch = EXTABLE_TO_NON_TEXT,
1093 	.handler = extable_mismatch_handler,
1094 }
1095 };
1096 
1097 static const struct sectioncheck *section_mismatch(
1098 		const char *fromsec, const char *tosec)
1099 {
1100 	int i;
1101 	int elems = sizeof(sectioncheck) / sizeof(struct sectioncheck);
1102 	const struct sectioncheck *check = &sectioncheck[0];
1103 
1104 	/*
1105 	 * The target section could be the SHT_NUL section when we're
1106 	 * handling relocations to un-resolved symbols, trying to match it
1107 	 * doesn't make much sense and causes build failures on parisc and
1108 	 * mn10300 architectures.
1109 	 */
1110 	if (*tosec == '\0')
1111 		return NULL;
1112 
1113 	for (i = 0; i < elems; i++) {
1114 		if (match(fromsec, check->fromsec)) {
1115 			if (check->bad_tosec[0] && match(tosec, check->bad_tosec))
1116 				return check;
1117 			if (check->good_tosec[0] && !match(tosec, check->good_tosec))
1118 				return check;
1119 		}
1120 		check++;
1121 	}
1122 	return NULL;
1123 }
1124 
1125 /**
1126  * Whitelist to allow certain references to pass with no warning.
1127  *
1128  * Pattern 1:
1129  *   If a module parameter is declared __initdata and permissions=0
1130  *   then this is legal despite the warning generated.
1131  *   We cannot see value of permissions here, so just ignore
1132  *   this pattern.
1133  *   The pattern is identified by:
1134  *   tosec   = .init.data
1135  *   fromsec = .data*
1136  *   atsym   =__param*
1137  *
1138  * Pattern 1a:
1139  *   module_param_call() ops can refer to __init set function if permissions=0
1140  *   The pattern is identified by:
1141  *   tosec   = .init.text
1142  *   fromsec = .data*
1143  *   atsym   = __param_ops_*
1144  *
1145  * Pattern 2:
1146  *   Many drivers utilise a *driver container with references to
1147  *   add, remove, probe functions etc.
1148  *   the pattern is identified by:
1149  *   tosec   = init or exit section
1150  *   fromsec = data section
1151  *   atsym = *driver, *_template, *_sht, *_ops, *_probe,
1152  *           *probe_one, *_console, *_timer
1153  *
1154  * Pattern 3:
1155  *   Whitelist all references from .head.text to any init section
1156  *
1157  * Pattern 4:
1158  *   Some symbols belong to init section but still it is ok to reference
1159  *   these from non-init sections as these symbols don't have any memory
1160  *   allocated for them and symbol address and value are same. So even
1161  *   if init section is freed, its ok to reference those symbols.
1162  *   For ex. symbols marking the init section boundaries.
1163  *   This pattern is identified by
1164  *   refsymname = __init_begin, _sinittext, _einittext
1165  *
1166  * Pattern 5:
1167  *   GCC may optimize static inlines when fed constant arg(s) resulting
1168  *   in functions like cpumask_empty() -- generating an associated symbol
1169  *   cpumask_empty.constprop.3 that appears in the audit.  If the const that
1170  *   is passed in comes from __init, like say nmi_ipi_mask, we get a
1171  *   meaningless section warning.  May need to add isra symbols too...
1172  *   This pattern is identified by
1173  *   tosec   = init section
1174  *   fromsec = text section
1175  *   refsymname = *.constprop.*
1176  *
1177  **/
1178 static int secref_whitelist(const struct sectioncheck *mismatch,
1179 			    const char *fromsec, const char *fromsym,
1180 			    const char *tosec, const char *tosym)
1181 {
1182 	/* Check for pattern 1 */
1183 	if (match(tosec, init_data_sections) &&
1184 	    match(fromsec, data_sections) &&
1185 	    (strncmp(fromsym, "__param", strlen("__param")) == 0))
1186 		return 0;
1187 
1188 	/* Check for pattern 1a */
1189 	if (strcmp(tosec, ".init.text") == 0 &&
1190 	    match(fromsec, data_sections) &&
1191 	    (strncmp(fromsym, "__param_ops_", strlen("__param_ops_")) == 0))
1192 		return 0;
1193 
1194 	/* Check for pattern 2 */
1195 	if (match(tosec, init_exit_sections) &&
1196 	    match(fromsec, data_sections) &&
1197 	    match(fromsym, mismatch->symbol_white_list))
1198 		return 0;
1199 
1200 	/* Check for pattern 3 */
1201 	if (match(fromsec, head_sections) &&
1202 	    match(tosec, init_sections))
1203 		return 0;
1204 
1205 	/* Check for pattern 4 */
1206 	if (match(tosym, linker_symbols))
1207 		return 0;
1208 
1209 	/* Check for pattern 5 */
1210 	if (match(fromsec, text_sections) &&
1211 	    match(tosec, init_sections) &&
1212 	    match(fromsym, optim_symbols))
1213 		return 0;
1214 
1215 	return 1;
1216 }
1217 
1218 /**
1219  * Find symbol based on relocation record info.
1220  * In some cases the symbol supplied is a valid symbol so
1221  * return refsym. If st_name != 0 we assume this is a valid symbol.
1222  * In other cases the symbol needs to be looked up in the symbol table
1223  * based on section and address.
1224  *  **/
1225 static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
1226 				Elf_Sym *relsym)
1227 {
1228 	Elf_Sym *sym;
1229 	Elf_Sym *near = NULL;
1230 	Elf64_Sword distance = 20;
1231 	Elf64_Sword d;
1232 	unsigned int relsym_secindex;
1233 
1234 	if (relsym->st_name != 0)
1235 		return relsym;
1236 
1237 	relsym_secindex = get_secindex(elf, relsym);
1238 	for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1239 		if (get_secindex(elf, sym) != relsym_secindex)
1240 			continue;
1241 		if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
1242 			continue;
1243 		if (sym->st_value == addr)
1244 			return sym;
1245 		/* Find a symbol nearby - addr are maybe negative */
1246 		d = sym->st_value - addr;
1247 		if (d < 0)
1248 			d = addr - sym->st_value;
1249 		if (d < distance) {
1250 			distance = d;
1251 			near = sym;
1252 		}
1253 	}
1254 	/* We need a close match */
1255 	if (distance < 20)
1256 		return near;
1257 	else
1258 		return NULL;
1259 }
1260 
1261 static inline int is_arm_mapping_symbol(const char *str)
1262 {
1263 	return str[0] == '$' && strchr("axtd", str[1])
1264 	       && (str[2] == '\0' || str[2] == '.');
1265 }
1266 
1267 /*
1268  * If there's no name there, ignore it; likewise, ignore it if it's
1269  * one of the magic symbols emitted used by current ARM tools.
1270  *
1271  * Otherwise if find_symbols_between() returns those symbols, they'll
1272  * fail the whitelist tests and cause lots of false alarms ... fixable
1273  * only by merging __exit and __init sections into __text, bloating
1274  * the kernel (which is especially evil on embedded platforms).
1275  */
1276 static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
1277 {
1278 	const char *name = elf->strtab + sym->st_name;
1279 
1280 	if (!name || !strlen(name))
1281 		return 0;
1282 	return !is_arm_mapping_symbol(name);
1283 }
1284 
1285 /*
1286  * Find symbols before or equal addr and after addr - in the section sec.
1287  * If we find two symbols with equal offset prefer one with a valid name.
1288  * The ELF format may have a better way to detect what type of symbol
1289  * it is, but this works for now.
1290  **/
1291 static Elf_Sym *find_elf_symbol2(struct elf_info *elf, Elf_Addr addr,
1292 				 const char *sec)
1293 {
1294 	Elf_Sym *sym;
1295 	Elf_Sym *near = NULL;
1296 	Elf_Addr distance = ~0;
1297 
1298 	for (sym = elf->symtab_start; sym < elf->symtab_stop; sym++) {
1299 		const char *symsec;
1300 
1301 		if (is_shndx_special(sym->st_shndx))
1302 			continue;
1303 		symsec = sec_name(elf, get_secindex(elf, sym));
1304 		if (strcmp(symsec, sec) != 0)
1305 			continue;
1306 		if (!is_valid_name(elf, sym))
1307 			continue;
1308 		if (sym->st_value <= addr) {
1309 			if ((addr - sym->st_value) < distance) {
1310 				distance = addr - sym->st_value;
1311 				near = sym;
1312 			} else if ((addr - sym->st_value) == distance) {
1313 				near = sym;
1314 			}
1315 		}
1316 	}
1317 	return near;
1318 }
1319 
1320 /*
1321  * Convert a section name to the function/data attribute
1322  * .init.text => __init
1323  * .memexitconst => __memconst
1324  * etc.
1325  *
1326  * The memory of returned value has been allocated on a heap. The user of this
1327  * method should free it after usage.
1328 */
1329 static char *sec2annotation(const char *s)
1330 {
1331 	if (match(s, init_exit_sections)) {
1332 		char *p = malloc(20);
1333 		char *r = p;
1334 
1335 		*p++ = '_';
1336 		*p++ = '_';
1337 		if (*s == '.')
1338 			s++;
1339 		while (*s && *s != '.')
1340 			*p++ = *s++;
1341 		*p = '\0';
1342 		if (*s == '.')
1343 			s++;
1344 		if (strstr(s, "rodata") != NULL)
1345 			strcat(p, "const ");
1346 		else if (strstr(s, "data") != NULL)
1347 			strcat(p, "data ");
1348 		else
1349 			strcat(p, " ");
1350 		return r;
1351 	} else {
1352 		return strdup("");
1353 	}
1354 }
1355 
1356 static int is_function(Elf_Sym *sym)
1357 {
1358 	if (sym)
1359 		return ELF_ST_TYPE(sym->st_info) == STT_FUNC;
1360 	else
1361 		return -1;
1362 }
1363 
1364 static void print_section_list(const char * const list[20])
1365 {
1366 	const char *const *s = list;
1367 
1368 	while (*s) {
1369 		fprintf(stderr, "%s", *s);
1370 		s++;
1371 		if (*s)
1372 			fprintf(stderr, ", ");
1373 	}
1374 	fprintf(stderr, "\n");
1375 }
1376 
1377 static inline void get_pretty_name(int is_func, const char** name, const char** name_p)
1378 {
1379 	switch (is_func) {
1380 	case 0:	*name = "variable"; *name_p = ""; break;
1381 	case 1:	*name = "function"; *name_p = "()"; break;
1382 	default: *name = "(unknown reference)"; *name_p = ""; break;
1383 	}
1384 }
1385 
1386 /*
1387  * Print a warning about a section mismatch.
1388  * Try to find symbols near it so user can find it.
1389  * Check whitelist before warning - it may be a false positive.
1390  */
1391 static void report_sec_mismatch(const char *modname,
1392 				const struct sectioncheck *mismatch,
1393 				const char *fromsec,
1394 				unsigned long long fromaddr,
1395 				const char *fromsym,
1396 				int from_is_func,
1397 				const char *tosec, const char *tosym,
1398 				int to_is_func)
1399 {
1400 	const char *from, *from_p;
1401 	const char *to, *to_p;
1402 	char *prl_from;
1403 	char *prl_to;
1404 
1405 	sec_mismatch_count++;
1406 	if (!sec_mismatch_verbose)
1407 		return;
1408 
1409 	get_pretty_name(from_is_func, &from, &from_p);
1410 	get_pretty_name(to_is_func, &to, &to_p);
1411 
1412 	warn("%s(%s+0x%llx): Section mismatch in reference from the %s %s%s "
1413 	     "to the %s %s:%s%s\n",
1414 	     modname, fromsec, fromaddr, from, fromsym, from_p, to, tosec,
1415 	     tosym, to_p);
1416 
1417 	switch (mismatch->mismatch) {
1418 	case TEXT_TO_ANY_INIT:
1419 		prl_from = sec2annotation(fromsec);
1420 		prl_to = sec2annotation(tosec);
1421 		fprintf(stderr,
1422 		"The function %s%s() references\n"
1423 		"the %s %s%s%s.\n"
1424 		"This is often because %s lacks a %s\n"
1425 		"annotation or the annotation of %s is wrong.\n",
1426 		prl_from, fromsym,
1427 		to, prl_to, tosym, to_p,
1428 		fromsym, prl_to, tosym);
1429 		free(prl_from);
1430 		free(prl_to);
1431 		break;
1432 	case DATA_TO_ANY_INIT: {
1433 		prl_to = sec2annotation(tosec);
1434 		fprintf(stderr,
1435 		"The variable %s references\n"
1436 		"the %s %s%s%s\n"
1437 		"If the reference is valid then annotate the\n"
1438 		"variable with __init* or __refdata (see linux/init.h) "
1439 		"or name the variable:\n",
1440 		fromsym, to, prl_to, tosym, to_p);
1441 		print_section_list(mismatch->symbol_white_list);
1442 		free(prl_to);
1443 		break;
1444 	}
1445 	case TEXT_TO_ANY_EXIT:
1446 		prl_to = sec2annotation(tosec);
1447 		fprintf(stderr,
1448 		"The function %s() references a %s in an exit section.\n"
1449 		"Often the %s %s%s has valid usage outside the exit section\n"
1450 		"and the fix is to remove the %sannotation of %s.\n",
1451 		fromsym, to, to, tosym, to_p, prl_to, tosym);
1452 		free(prl_to);
1453 		break;
1454 	case DATA_TO_ANY_EXIT: {
1455 		prl_to = sec2annotation(tosec);
1456 		fprintf(stderr,
1457 		"The variable %s references\n"
1458 		"the %s %s%s%s\n"
1459 		"If the reference is valid then annotate the\n"
1460 		"variable with __exit* (see linux/init.h) or "
1461 		"name the variable:\n",
1462 		fromsym, to, prl_to, tosym, to_p);
1463 		print_section_list(mismatch->symbol_white_list);
1464 		free(prl_to);
1465 		break;
1466 	}
1467 	case XXXINIT_TO_SOME_INIT:
1468 	case XXXEXIT_TO_SOME_EXIT:
1469 		prl_from = sec2annotation(fromsec);
1470 		prl_to = sec2annotation(tosec);
1471 		fprintf(stderr,
1472 		"The %s %s%s%s references\n"
1473 		"a %s %s%s%s.\n"
1474 		"If %s is only used by %s then\n"
1475 		"annotate %s with a matching annotation.\n",
1476 		from, prl_from, fromsym, from_p,
1477 		to, prl_to, tosym, to_p,
1478 		tosym, fromsym, tosym);
1479 		free(prl_from);
1480 		free(prl_to);
1481 		break;
1482 	case ANY_INIT_TO_ANY_EXIT:
1483 		prl_from = sec2annotation(fromsec);
1484 		prl_to = sec2annotation(tosec);
1485 		fprintf(stderr,
1486 		"The %s %s%s%s references\n"
1487 		"a %s %s%s%s.\n"
1488 		"This is often seen when error handling "
1489 		"in the init function\n"
1490 		"uses functionality in the exit path.\n"
1491 		"The fix is often to remove the %sannotation of\n"
1492 		"%s%s so it may be used outside an exit section.\n",
1493 		from, prl_from, fromsym, from_p,
1494 		to, prl_to, tosym, to_p,
1495 		prl_to, tosym, to_p);
1496 		free(prl_from);
1497 		free(prl_to);
1498 		break;
1499 	case ANY_EXIT_TO_ANY_INIT:
1500 		prl_from = sec2annotation(fromsec);
1501 		prl_to = sec2annotation(tosec);
1502 		fprintf(stderr,
1503 		"The %s %s%s%s references\n"
1504 		"a %s %s%s%s.\n"
1505 		"This is often seen when error handling "
1506 		"in the exit function\n"
1507 		"uses functionality in the init path.\n"
1508 		"The fix is often to remove the %sannotation of\n"
1509 		"%s%s so it may be used outside an init section.\n",
1510 		from, prl_from, fromsym, from_p,
1511 		to, prl_to, tosym, to_p,
1512 		prl_to, tosym, to_p);
1513 		free(prl_from);
1514 		free(prl_to);
1515 		break;
1516 	case EXPORT_TO_INIT_EXIT:
1517 		prl_to = sec2annotation(tosec);
1518 		fprintf(stderr,
1519 		"The symbol %s is exported and annotated %s\n"
1520 		"Fix this by removing the %sannotation of %s "
1521 		"or drop the export.\n",
1522 		tosym, prl_to, prl_to, tosym);
1523 		free(prl_to);
1524 		break;
1525 	case EXTABLE_TO_NON_TEXT:
1526 		fatal("There's a special handler for this mismatch type, "
1527 		      "we should never get here.");
1528 		break;
1529 	}
1530 	fprintf(stderr, "\n");
1531 }
1532 
1533 static void default_mismatch_handler(const char *modname, struct elf_info *elf,
1534 				     const struct sectioncheck* const mismatch,
1535 				     Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1536 {
1537 	const char *tosec;
1538 	Elf_Sym *to;
1539 	Elf_Sym *from;
1540 	const char *tosym;
1541 	const char *fromsym;
1542 
1543 	from = find_elf_symbol2(elf, r->r_offset, fromsec);
1544 	fromsym = sym_name(elf, from);
1545 
1546 	if (!strncmp(fromsym, "reference___initcall",
1547 		     sizeof("reference___initcall")-1))
1548 		return;
1549 
1550 	tosec = sec_name(elf, get_secindex(elf, sym));
1551 	to = find_elf_symbol(elf, r->r_addend, sym);
1552 	tosym = sym_name(elf, to);
1553 
1554 	/* check whitelist - we may ignore it */
1555 	if (secref_whitelist(mismatch,
1556 			     fromsec, fromsym, tosec, tosym)) {
1557 		report_sec_mismatch(modname, mismatch,
1558 				    fromsec, r->r_offset, fromsym,
1559 				    is_function(from), tosec, tosym,
1560 				    is_function(to));
1561 	}
1562 }
1563 
1564 static int is_executable_section(struct elf_info* elf, unsigned int section_index)
1565 {
1566 	if (section_index > elf->num_sections)
1567 		fatal("section_index is outside elf->num_sections!\n");
1568 
1569 	return ((elf->sechdrs[section_index].sh_flags & SHF_EXECINSTR) == SHF_EXECINSTR);
1570 }
1571 
1572 /*
1573  * We rely on a gross hack in section_rel[a]() calling find_extable_entry_size()
1574  * to know the sizeof(struct exception_table_entry) for the target architecture.
1575  */
1576 static unsigned int extable_entry_size = 0;
1577 static void find_extable_entry_size(const char* const sec, const Elf_Rela* r)
1578 {
1579 	/*
1580 	 * If we're currently checking the second relocation within __ex_table,
1581 	 * that relocation offset tells us the offsetof(struct
1582 	 * exception_table_entry, fixup) which is equal to sizeof(struct
1583 	 * exception_table_entry) divided by two.  We use that to our advantage
1584 	 * since there's no portable way to get that size as every architecture
1585 	 * seems to go with different sized types.  Not pretty but better than
1586 	 * hard-coding the size for every architecture..
1587 	 */
1588 	if (!extable_entry_size)
1589 		extable_entry_size = r->r_offset * 2;
1590 }
1591 
1592 static inline bool is_extable_fault_address(Elf_Rela *r)
1593 {
1594 	/*
1595 	 * extable_entry_size is only discovered after we've handled the
1596 	 * _second_ relocation in __ex_table, so only abort when we're not
1597 	 * handling the first reloc and extable_entry_size is zero.
1598 	 */
1599 	if (r->r_offset && extable_entry_size == 0)
1600 		fatal("extable_entry size hasn't been discovered!\n");
1601 
1602 	return ((r->r_offset == 0) ||
1603 		(r->r_offset % extable_entry_size == 0));
1604 }
1605 
1606 #define is_second_extable_reloc(Start, Cur, Sec)			\
1607 	(((Cur) == (Start) + 1) && (strcmp("__ex_table", (Sec)) == 0))
1608 
1609 static void report_extable_warnings(const char* modname, struct elf_info* elf,
1610 				    const struct sectioncheck* const mismatch,
1611 				    Elf_Rela* r, Elf_Sym* sym,
1612 				    const char* fromsec, const char* tosec)
1613 {
1614 	Elf_Sym* fromsym = find_elf_symbol2(elf, r->r_offset, fromsec);
1615 	const char* fromsym_name = sym_name(elf, fromsym);
1616 	Elf_Sym* tosym = find_elf_symbol(elf, r->r_addend, sym);
1617 	const char* tosym_name = sym_name(elf, tosym);
1618 	const char* from_pretty_name;
1619 	const char* from_pretty_name_p;
1620 	const char* to_pretty_name;
1621 	const char* to_pretty_name_p;
1622 
1623 	get_pretty_name(is_function(fromsym),
1624 			&from_pretty_name, &from_pretty_name_p);
1625 	get_pretty_name(is_function(tosym),
1626 			&to_pretty_name, &to_pretty_name_p);
1627 
1628 	warn("%s(%s+0x%lx): Section mismatch in reference"
1629 	     " from the %s %s%s to the %s %s:%s%s\n",
1630 	     modname, fromsec, (long)r->r_offset, from_pretty_name,
1631 	     fromsym_name, from_pretty_name_p,
1632 	     to_pretty_name, tosec, tosym_name, to_pretty_name_p);
1633 
1634 	if (!match(tosec, mismatch->bad_tosec) &&
1635 	    is_executable_section(elf, get_secindex(elf, sym)))
1636 		fprintf(stderr,
1637 			"The relocation at %s+0x%lx references\n"
1638 			"section \"%s\" which is not in the list of\n"
1639 			"authorized sections.  If you're adding a new section\n"
1640 			"and/or if this reference is valid, add \"%s\" to the\n"
1641 			"list of authorized sections to jump to on fault.\n"
1642 			"This can be achieved by adding \"%s\" to \n"
1643 			"OTHER_TEXT_SECTIONS in scripts/mod/modpost.c.\n",
1644 			fromsec, (long)r->r_offset, tosec, tosec, tosec);
1645 }
1646 
1647 static void extable_mismatch_handler(const char* modname, struct elf_info *elf,
1648 				     const struct sectioncheck* const mismatch,
1649 				     Elf_Rela* r, Elf_Sym* sym,
1650 				     const char *fromsec)
1651 {
1652 	const char* tosec = sec_name(elf, get_secindex(elf, sym));
1653 
1654 	sec_mismatch_count++;
1655 
1656 	if (sec_mismatch_verbose)
1657 		report_extable_warnings(modname, elf, mismatch, r, sym,
1658 					fromsec, tosec);
1659 
1660 	if (match(tosec, mismatch->bad_tosec))
1661 		fatal("The relocation at %s+0x%lx references\n"
1662 		      "section \"%s\" which is black-listed.\n"
1663 		      "Something is seriously wrong and should be fixed.\n"
1664 		      "You might get more information about where this is\n"
1665 		      "coming from by using scripts/check_extable.sh %s\n",
1666 		      fromsec, (long)r->r_offset, tosec, modname);
1667 	else if (!is_executable_section(elf, get_secindex(elf, sym))) {
1668 		if (is_extable_fault_address(r))
1669 			fatal("The relocation at %s+0x%lx references\n"
1670 			      "section \"%s\" which is not executable, IOW\n"
1671 			      "it is not possible for the kernel to fault\n"
1672 			      "at that address.  Something is seriously wrong\n"
1673 			      "and should be fixed.\n",
1674 			      fromsec, (long)r->r_offset, tosec);
1675 		else
1676 			fatal("The relocation at %s+0x%lx references\n"
1677 			      "section \"%s\" which is not executable, IOW\n"
1678 			      "the kernel will fault if it ever tries to\n"
1679 			      "jump to it.  Something is seriously wrong\n"
1680 			      "and should be fixed.\n",
1681 			      fromsec, (long)r->r_offset, tosec);
1682 	}
1683 }
1684 
1685 static void check_section_mismatch(const char *modname, struct elf_info *elf,
1686 				   Elf_Rela *r, Elf_Sym *sym, const char *fromsec)
1687 {
1688 	const char *tosec = sec_name(elf, get_secindex(elf, sym));
1689 	const struct sectioncheck *mismatch = section_mismatch(fromsec, tosec);
1690 
1691 	if (mismatch) {
1692 		if (mismatch->handler)
1693 			mismatch->handler(modname, elf,  mismatch,
1694 					  r, sym, fromsec);
1695 		else
1696 			default_mismatch_handler(modname, elf, mismatch,
1697 						 r, sym, fromsec);
1698 	}
1699 }
1700 
1701 static unsigned int *reloc_location(struct elf_info *elf,
1702 				    Elf_Shdr *sechdr, Elf_Rela *r)
1703 {
1704 	Elf_Shdr *sechdrs = elf->sechdrs;
1705 	int section = sechdr->sh_info;
1706 
1707 	return (void *)elf->hdr + sechdrs[section].sh_offset +
1708 		r->r_offset;
1709 }
1710 
1711 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1712 {
1713 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1714 	unsigned int *location = reloc_location(elf, sechdr, r);
1715 
1716 	switch (r_typ) {
1717 	case R_386_32:
1718 		r->r_addend = TO_NATIVE(*location);
1719 		break;
1720 	case R_386_PC32:
1721 		r->r_addend = TO_NATIVE(*location) + 4;
1722 		/* For CONFIG_RELOCATABLE=y */
1723 		if (elf->hdr->e_type == ET_EXEC)
1724 			r->r_addend += r->r_offset;
1725 		break;
1726 	}
1727 	return 0;
1728 }
1729 
1730 #ifndef R_ARM_CALL
1731 #define R_ARM_CALL	28
1732 #endif
1733 #ifndef R_ARM_JUMP24
1734 #define R_ARM_JUMP24	29
1735 #endif
1736 
1737 #ifndef	R_ARM_THM_CALL
1738 #define	R_ARM_THM_CALL		10
1739 #endif
1740 #ifndef	R_ARM_THM_JUMP24
1741 #define	R_ARM_THM_JUMP24	30
1742 #endif
1743 #ifndef	R_ARM_THM_JUMP19
1744 #define	R_ARM_THM_JUMP19	51
1745 #endif
1746 
1747 static int addend_arm_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1748 {
1749 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1750 
1751 	switch (r_typ) {
1752 	case R_ARM_ABS32:
1753 		/* From ARM ABI: (S + A) | T */
1754 		r->r_addend = (int)(long)
1755 			      (elf->symtab_start + ELF_R_SYM(r->r_info));
1756 		break;
1757 	case R_ARM_PC24:
1758 	case R_ARM_CALL:
1759 	case R_ARM_JUMP24:
1760 	case R_ARM_THM_CALL:
1761 	case R_ARM_THM_JUMP24:
1762 	case R_ARM_THM_JUMP19:
1763 		/* From ARM ABI: ((S + A) | T) - P */
1764 		r->r_addend = (int)(long)(elf->hdr +
1765 			      sechdr->sh_offset +
1766 			      (r->r_offset - sechdr->sh_addr));
1767 		break;
1768 	default:
1769 		return 1;
1770 	}
1771 	return 0;
1772 }
1773 
1774 static int addend_mips_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
1775 {
1776 	unsigned int r_typ = ELF_R_TYPE(r->r_info);
1777 	unsigned int *location = reloc_location(elf, sechdr, r);
1778 	unsigned int inst;
1779 
1780 	if (r_typ == R_MIPS_HI16)
1781 		return 1;	/* skip this */
1782 	inst = TO_NATIVE(*location);
1783 	switch (r_typ) {
1784 	case R_MIPS_LO16:
1785 		r->r_addend = inst & 0xffff;
1786 		break;
1787 	case R_MIPS_26:
1788 		r->r_addend = (inst & 0x03ffffff) << 2;
1789 		break;
1790 	case R_MIPS_32:
1791 		r->r_addend = inst;
1792 		break;
1793 	}
1794 	return 0;
1795 }
1796 
1797 static void section_rela(const char *modname, struct elf_info *elf,
1798 			 Elf_Shdr *sechdr)
1799 {
1800 	Elf_Sym  *sym;
1801 	Elf_Rela *rela;
1802 	Elf_Rela r;
1803 	unsigned int r_sym;
1804 	const char *fromsec;
1805 
1806 	Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset;
1807 	Elf_Rela *stop  = (void *)start + sechdr->sh_size;
1808 
1809 	fromsec = sech_name(elf, sechdr);
1810 	fromsec += strlen(".rela");
1811 	/* if from section (name) is know good then skip it */
1812 	if (match(fromsec, section_white_list))
1813 		return;
1814 
1815 	for (rela = start; rela < stop; rela++) {
1816 		r.r_offset = TO_NATIVE(rela->r_offset);
1817 #if KERNEL_ELFCLASS == ELFCLASS64
1818 		if (elf->hdr->e_machine == EM_MIPS) {
1819 			unsigned int r_typ;
1820 			r_sym = ELF64_MIPS_R_SYM(rela->r_info);
1821 			r_sym = TO_NATIVE(r_sym);
1822 			r_typ = ELF64_MIPS_R_TYPE(rela->r_info);
1823 			r.r_info = ELF64_R_INFO(r_sym, r_typ);
1824 		} else {
1825 			r.r_info = TO_NATIVE(rela->r_info);
1826 			r_sym = ELF_R_SYM(r.r_info);
1827 		}
1828 #else
1829 		r.r_info = TO_NATIVE(rela->r_info);
1830 		r_sym = ELF_R_SYM(r.r_info);
1831 #endif
1832 		r.r_addend = TO_NATIVE(rela->r_addend);
1833 		sym = elf->symtab_start + r_sym;
1834 		/* Skip special sections */
1835 		if (is_shndx_special(sym->st_shndx))
1836 			continue;
1837 		if (is_second_extable_reloc(start, rela, fromsec))
1838 			find_extable_entry_size(fromsec, &r);
1839 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1840 	}
1841 }
1842 
1843 static void section_rel(const char *modname, struct elf_info *elf,
1844 			Elf_Shdr *sechdr)
1845 {
1846 	Elf_Sym *sym;
1847 	Elf_Rel *rel;
1848 	Elf_Rela r;
1849 	unsigned int r_sym;
1850 	const char *fromsec;
1851 
1852 	Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset;
1853 	Elf_Rel *stop  = (void *)start + sechdr->sh_size;
1854 
1855 	fromsec = sech_name(elf, sechdr);
1856 	fromsec += strlen(".rel");
1857 	/* if from section (name) is know good then skip it */
1858 	if (match(fromsec, section_white_list))
1859 		return;
1860 
1861 	for (rel = start; rel < stop; rel++) {
1862 		r.r_offset = TO_NATIVE(rel->r_offset);
1863 #if KERNEL_ELFCLASS == ELFCLASS64
1864 		if (elf->hdr->e_machine == EM_MIPS) {
1865 			unsigned int r_typ;
1866 			r_sym = ELF64_MIPS_R_SYM(rel->r_info);
1867 			r_sym = TO_NATIVE(r_sym);
1868 			r_typ = ELF64_MIPS_R_TYPE(rel->r_info);
1869 			r.r_info = ELF64_R_INFO(r_sym, r_typ);
1870 		} else {
1871 			r.r_info = TO_NATIVE(rel->r_info);
1872 			r_sym = ELF_R_SYM(r.r_info);
1873 		}
1874 #else
1875 		r.r_info = TO_NATIVE(rel->r_info);
1876 		r_sym = ELF_R_SYM(r.r_info);
1877 #endif
1878 		r.r_addend = 0;
1879 		switch (elf->hdr->e_machine) {
1880 		case EM_386:
1881 			if (addend_386_rel(elf, sechdr, &r))
1882 				continue;
1883 			break;
1884 		case EM_ARM:
1885 			if (addend_arm_rel(elf, sechdr, &r))
1886 				continue;
1887 			break;
1888 		case EM_MIPS:
1889 			if (addend_mips_rel(elf, sechdr, &r))
1890 				continue;
1891 			break;
1892 		}
1893 		sym = elf->symtab_start + r_sym;
1894 		/* Skip special sections */
1895 		if (is_shndx_special(sym->st_shndx))
1896 			continue;
1897 		if (is_second_extable_reloc(start, rel, fromsec))
1898 			find_extable_entry_size(fromsec, &r);
1899 		check_section_mismatch(modname, elf, &r, sym, fromsec);
1900 	}
1901 }
1902 
1903 /**
1904  * A module includes a number of sections that are discarded
1905  * either when loaded or when used as built-in.
1906  * For loaded modules all functions marked __init and all data
1907  * marked __initdata will be discarded when the module has been initialized.
1908  * Likewise for modules used built-in the sections marked __exit
1909  * are discarded because __exit marked function are supposed to be called
1910  * only when a module is unloaded which never happens for built-in modules.
1911  * The check_sec_ref() function traverses all relocation records
1912  * to find all references to a section that reference a section that will
1913  * be discarded and warns about it.
1914  **/
1915 static void check_sec_ref(struct module *mod, const char *modname,
1916 			  struct elf_info *elf)
1917 {
1918 	int i;
1919 	Elf_Shdr *sechdrs = elf->sechdrs;
1920 
1921 	/* Walk through all sections */
1922 	for (i = 0; i < elf->num_sections; i++) {
1923 		check_section(modname, elf, &elf->sechdrs[i]);
1924 		/* We want to process only relocation sections and not .init */
1925 		if (sechdrs[i].sh_type == SHT_RELA)
1926 			section_rela(modname, elf, &elf->sechdrs[i]);
1927 		else if (sechdrs[i].sh_type == SHT_REL)
1928 			section_rel(modname, elf, &elf->sechdrs[i]);
1929 	}
1930 }
1931 
1932 static char *remove_dot(char *s)
1933 {
1934 	size_t n = strcspn(s, ".");
1935 
1936 	if (n && s[n]) {
1937 		size_t m = strspn(s + n + 1, "0123456789");
1938 		if (m && (s[n + m] == '.' || s[n + m] == 0))
1939 			s[n] = 0;
1940 	}
1941 	return s;
1942 }
1943 
1944 static void read_symbols(char *modname)
1945 {
1946 	const char *symname;
1947 	char *version;
1948 	char *license;
1949 	struct module *mod;
1950 	struct elf_info info = { };
1951 	Elf_Sym *sym;
1952 
1953 	if (!parse_elf(&info, modname))
1954 		return;
1955 
1956 	mod = new_module(modname);
1957 
1958 	/* When there's no vmlinux, don't print warnings about
1959 	 * unresolved symbols (since there'll be too many ;) */
1960 	if (is_vmlinux(modname)) {
1961 		have_vmlinux = 1;
1962 		mod->skip = 1;
1963 	}
1964 
1965 	license = get_modinfo(info.modinfo, info.modinfo_len, "license");
1966 	if (!license && !is_vmlinux(modname))
1967 		warn("modpost: missing MODULE_LICENSE() in %s\n"
1968 		     "see include/linux/module.h for "
1969 		     "more information\n", modname);
1970 	while (license) {
1971 		if (license_is_gpl_compatible(license))
1972 			mod->gpl_compatible = 1;
1973 		else {
1974 			mod->gpl_compatible = 0;
1975 			break;
1976 		}
1977 		license = get_next_modinfo(info.modinfo, info.modinfo_len,
1978 					   "license", license);
1979 	}
1980 
1981 	for (sym = info.symtab_start; sym < info.symtab_stop; sym++) {
1982 		symname = remove_dot(info.strtab + sym->st_name);
1983 
1984 		handle_modversions(mod, &info, sym, symname);
1985 		handle_moddevtable(mod, &info, sym, symname);
1986 	}
1987 	if (!is_vmlinux(modname) ||
1988 	     (is_vmlinux(modname) && vmlinux_section_warnings))
1989 		check_sec_ref(mod, modname, &info);
1990 
1991 	version = get_modinfo(info.modinfo, info.modinfo_len, "version");
1992 	if (version)
1993 		maybe_frob_rcs_version(modname, version, info.modinfo,
1994 				       version - (char *)info.hdr);
1995 	if (version || (all_versions && !is_vmlinux(modname)))
1996 		get_src_version(modname, mod->srcversion,
1997 				sizeof(mod->srcversion)-1);
1998 
1999 	parse_elf_finish(&info);
2000 
2001 	/* Our trick to get versioning for module struct etc. - it's
2002 	 * never passed as an argument to an exported function, so
2003 	 * the automatic versioning doesn't pick it up, but it's really
2004 	 * important anyhow */
2005 	if (modversions)
2006 		mod->unres = alloc_symbol("module_layout", 0, mod->unres);
2007 }
2008 
2009 static void read_symbols_from_files(const char *filename)
2010 {
2011 	FILE *in = stdin;
2012 	char fname[PATH_MAX];
2013 
2014 	if (strcmp(filename, "-") != 0) {
2015 		in = fopen(filename, "r");
2016 		if (!in)
2017 			fatal("Can't open filenames file %s: %m", filename);
2018 	}
2019 
2020 	while (fgets(fname, PATH_MAX, in) != NULL) {
2021 		if (strends(fname, "\n"))
2022 			fname[strlen(fname)-1] = '\0';
2023 		read_symbols(fname);
2024 	}
2025 
2026 	if (in != stdin)
2027 		fclose(in);
2028 }
2029 
2030 #define SZ 500
2031 
2032 /* We first write the generated file into memory using the
2033  * following helper, then compare to the file on disk and
2034  * only update the later if anything changed */
2035 
2036 void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
2037 						      const char *fmt, ...)
2038 {
2039 	char tmp[SZ];
2040 	int len;
2041 	va_list ap;
2042 
2043 	va_start(ap, fmt);
2044 	len = vsnprintf(tmp, SZ, fmt, ap);
2045 	buf_write(buf, tmp, len);
2046 	va_end(ap);
2047 }
2048 
2049 void buf_write(struct buffer *buf, const char *s, int len)
2050 {
2051 	if (buf->size - buf->pos < len) {
2052 		buf->size += len + SZ;
2053 		buf->p = realloc(buf->p, buf->size);
2054 	}
2055 	strncpy(buf->p + buf->pos, s, len);
2056 	buf->pos += len;
2057 }
2058 
2059 static void check_for_gpl_usage(enum export exp, const char *m, const char *s)
2060 {
2061 	const char *e = is_vmlinux(m) ?"":".ko";
2062 
2063 	switch (exp) {
2064 	case export_gpl:
2065 		fatal("modpost: GPL-incompatible module %s%s "
2066 		      "uses GPL-only symbol '%s'\n", m, e, s);
2067 		break;
2068 	case export_unused_gpl:
2069 		fatal("modpost: GPL-incompatible module %s%s "
2070 		      "uses GPL-only symbol marked UNUSED '%s'\n", m, e, s);
2071 		break;
2072 	case export_gpl_future:
2073 		warn("modpost: GPL-incompatible module %s%s "
2074 		      "uses future GPL-only symbol '%s'\n", m, e, s);
2075 		break;
2076 	case export_plain:
2077 	case export_unused:
2078 	case export_unknown:
2079 		/* ignore */
2080 		break;
2081 	}
2082 }
2083 
2084 static void check_for_unused(enum export exp, const char *m, const char *s)
2085 {
2086 	const char *e = is_vmlinux(m) ?"":".ko";
2087 
2088 	switch (exp) {
2089 	case export_unused:
2090 	case export_unused_gpl:
2091 		warn("modpost: module %s%s "
2092 		      "uses symbol '%s' marked UNUSED\n", m, e, s);
2093 		break;
2094 	default:
2095 		/* ignore */
2096 		break;
2097 	}
2098 }
2099 
2100 static void check_exports(struct module *mod)
2101 {
2102 	struct symbol *s, *exp;
2103 
2104 	for (s = mod->unres; s; s = s->next) {
2105 		const char *basename;
2106 		exp = find_symbol(s->name);
2107 		if (!exp || exp->module == mod)
2108 			continue;
2109 		basename = strrchr(mod->name, '/');
2110 		if (basename)
2111 			basename++;
2112 		else
2113 			basename = mod->name;
2114 		if (!mod->gpl_compatible)
2115 			check_for_gpl_usage(exp->export, basename, exp->name);
2116 		check_for_unused(exp->export, basename, exp->name);
2117 	}
2118 }
2119 
2120 static int check_modname_len(struct module *mod)
2121 {
2122 	const char *mod_name;
2123 
2124 	mod_name = strrchr(mod->name, '/');
2125 	if (mod_name == NULL)
2126 		mod_name = mod->name;
2127 	else
2128 		mod_name++;
2129 	if (strlen(mod_name) >= MODULE_NAME_LEN) {
2130 		merror("module name is too long [%s.ko]\n", mod->name);
2131 		return 1;
2132 	}
2133 
2134 	return 0;
2135 }
2136 
2137 /**
2138  * Header for the generated file
2139  **/
2140 static void add_header(struct buffer *b, struct module *mod)
2141 {
2142 	buf_printf(b, "#include <linux/module.h>\n");
2143 	buf_printf(b, "#include <linux/vermagic.h>\n");
2144 	buf_printf(b, "#include <linux/compiler.h>\n");
2145 	buf_printf(b, "\n");
2146 	buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2147 	buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
2148 	buf_printf(b, "\n");
2149 	buf_printf(b, "__visible struct module __this_module\n");
2150 	buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
2151 	buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2152 	if (mod->has_init)
2153 		buf_printf(b, "\t.init = init_module,\n");
2154 	if (mod->has_cleanup)
2155 		buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2156 			      "\t.exit = cleanup_module,\n"
2157 			      "#endif\n");
2158 	buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2159 	buf_printf(b, "};\n");
2160 }
2161 
2162 static void add_intree_flag(struct buffer *b, int is_intree)
2163 {
2164 	if (is_intree)
2165 		buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2166 }
2167 
2168 /* Cannot check for assembler */
2169 static void add_retpoline(struct buffer *b)
2170 {
2171 	buf_printf(b, "\n#ifdef RETPOLINE\n");
2172 	buf_printf(b, "MODULE_INFO(retpoline, \"Y\");\n");
2173 	buf_printf(b, "#endif\n");
2174 }
2175 
2176 static void add_staging_flag(struct buffer *b, const char *name)
2177 {
2178 	static const char *staging_dir = "drivers/staging";
2179 
2180 	if (strncmp(staging_dir, name, strlen(staging_dir)) == 0)
2181 		buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2182 }
2183 
2184 /**
2185  * Record CRCs for unresolved symbols
2186  **/
2187 static int add_versions(struct buffer *b, struct module *mod)
2188 {
2189 	struct symbol *s, *exp;
2190 	int err = 0;
2191 
2192 	for (s = mod->unres; s; s = s->next) {
2193 		exp = find_symbol(s->name);
2194 		if (!exp || exp->module == mod) {
2195 			if (have_vmlinux && !s->weak) {
2196 				if (warn_unresolved) {
2197 					warn("\"%s\" [%s.ko] undefined!\n",
2198 					     s->name, mod->name);
2199 				} else {
2200 					merror("\"%s\" [%s.ko] undefined!\n",
2201 					       s->name, mod->name);
2202 					err = 1;
2203 				}
2204 			}
2205 			continue;
2206 		}
2207 		s->module = exp->module;
2208 		s->crc_valid = exp->crc_valid;
2209 		s->crc = exp->crc;
2210 	}
2211 
2212 	if (!modversions)
2213 		return err;
2214 
2215 	buf_printf(b, "\n");
2216 	buf_printf(b, "static const struct modversion_info ____versions[]\n");
2217 	buf_printf(b, "__used\n");
2218 	buf_printf(b, "__attribute__((section(\"__versions\"))) = {\n");
2219 
2220 	for (s = mod->unres; s; s = s->next) {
2221 		if (!s->module)
2222 			continue;
2223 		if (!s->crc_valid) {
2224 			warn("\"%s\" [%s.ko] has no CRC!\n",
2225 				s->name, mod->name);
2226 			continue;
2227 		}
2228 		if (strlen(s->name) >= MODULE_NAME_LEN) {
2229 			merror("too long symbol \"%s\" [%s.ko]\n",
2230 			       s->name, mod->name);
2231 			err = 1;
2232 			break;
2233 		}
2234 		buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
2235 			   s->crc, s->name);
2236 	}
2237 
2238 	buf_printf(b, "};\n");
2239 
2240 	return err;
2241 }
2242 
2243 static void add_depends(struct buffer *b, struct module *mod,
2244 			struct module *modules)
2245 {
2246 	struct symbol *s;
2247 	struct module *m;
2248 	int first = 1;
2249 
2250 	for (m = modules; m; m = m->next)
2251 		m->seen = is_vmlinux(m->name);
2252 
2253 	buf_printf(b, "\n");
2254 	buf_printf(b, "static const char __module_depends[]\n");
2255 	buf_printf(b, "__used\n");
2256 	buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
2257 	buf_printf(b, "\"depends=");
2258 	for (s = mod->unres; s; s = s->next) {
2259 		const char *p;
2260 		if (!s->module)
2261 			continue;
2262 
2263 		if (s->module->seen)
2264 			continue;
2265 
2266 		s->module->seen = 1;
2267 		p = strrchr(s->module->name, '/');
2268 		if (p)
2269 			p++;
2270 		else
2271 			p = s->module->name;
2272 		buf_printf(b, "%s%s", first ? "" : ",", p);
2273 		first = 0;
2274 	}
2275 	buf_printf(b, "\";\n");
2276 }
2277 
2278 static void add_srcversion(struct buffer *b, struct module *mod)
2279 {
2280 	if (mod->srcversion[0]) {
2281 		buf_printf(b, "\n");
2282 		buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2283 			   mod->srcversion);
2284 	}
2285 }
2286 
2287 static void write_if_changed(struct buffer *b, const char *fname)
2288 {
2289 	char *tmp;
2290 	FILE *file;
2291 	struct stat st;
2292 
2293 	file = fopen(fname, "r");
2294 	if (!file)
2295 		goto write;
2296 
2297 	if (fstat(fileno(file), &st) < 0)
2298 		goto close_write;
2299 
2300 	if (st.st_size != b->pos)
2301 		goto close_write;
2302 
2303 	tmp = NOFAIL(malloc(b->pos));
2304 	if (fread(tmp, 1, b->pos, file) != b->pos)
2305 		goto free_write;
2306 
2307 	if (memcmp(tmp, b->p, b->pos) != 0)
2308 		goto free_write;
2309 
2310 	free(tmp);
2311 	fclose(file);
2312 	return;
2313 
2314  free_write:
2315 	free(tmp);
2316  close_write:
2317 	fclose(file);
2318  write:
2319 	file = fopen(fname, "w");
2320 	if (!file) {
2321 		perror(fname);
2322 		exit(1);
2323 	}
2324 	if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2325 		perror(fname);
2326 		exit(1);
2327 	}
2328 	fclose(file);
2329 }
2330 
2331 /* parse Module.symvers file. line format:
2332  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2333  **/
2334 static void read_dump(const char *fname, unsigned int kernel)
2335 {
2336 	unsigned long size, pos = 0;
2337 	void *file = grab_file(fname, &size);
2338 	char *line;
2339 
2340 	if (!file)
2341 		/* No symbol versions, silently ignore */
2342 		return;
2343 
2344 	while ((line = get_next_line(&pos, file, size))) {
2345 		char *symname, *modname, *d, *export, *end;
2346 		unsigned int crc;
2347 		struct module *mod;
2348 		struct symbol *s;
2349 
2350 		if (!(symname = strchr(line, '\t')))
2351 			goto fail;
2352 		*symname++ = '\0';
2353 		if (!(modname = strchr(symname, '\t')))
2354 			goto fail;
2355 		*modname++ = '\0';
2356 		if ((export = strchr(modname, '\t')) != NULL)
2357 			*export++ = '\0';
2358 		if (export && ((end = strchr(export, '\t')) != NULL))
2359 			*end = '\0';
2360 		crc = strtoul(line, &d, 16);
2361 		if (*symname == '\0' || *modname == '\0' || *d != '\0')
2362 			goto fail;
2363 		mod = find_module(modname);
2364 		if (!mod) {
2365 			if (is_vmlinux(modname))
2366 				have_vmlinux = 1;
2367 			mod = new_module(modname);
2368 			mod->skip = 1;
2369 		}
2370 		s = sym_add_exported(symname, mod, export_no(export));
2371 		s->kernel    = kernel;
2372 		s->preloaded = 1;
2373 		sym_update_crc(symname, mod, crc, export_no(export));
2374 	}
2375 	release_file(file, size);
2376 	return;
2377 fail:
2378 	release_file(file, size);
2379 	fatal("parse error in symbol dump file\n");
2380 }
2381 
2382 /* For normal builds always dump all symbols.
2383  * For external modules only dump symbols
2384  * that are not read from kernel Module.symvers.
2385  **/
2386 static int dump_sym(struct symbol *sym)
2387 {
2388 	if (!external_module)
2389 		return 1;
2390 	if (sym->vmlinux || sym->kernel)
2391 		return 0;
2392 	return 1;
2393 }
2394 
2395 static void write_dump(const char *fname)
2396 {
2397 	struct buffer buf = { };
2398 	struct symbol *symbol;
2399 	int n;
2400 
2401 	for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2402 		symbol = symbolhash[n];
2403 		while (symbol) {
2404 			if (dump_sym(symbol))
2405 				buf_printf(&buf, "0x%08x\t%s\t%s\t%s\n",
2406 					symbol->crc, symbol->name,
2407 					symbol->module->name,
2408 					export_str(symbol->export));
2409 			symbol = symbol->next;
2410 		}
2411 	}
2412 	write_if_changed(&buf, fname);
2413 	free(buf.p);
2414 }
2415 
2416 struct ext_sym_list {
2417 	struct ext_sym_list *next;
2418 	const char *file;
2419 };
2420 
2421 int main(int argc, char **argv)
2422 {
2423 	struct module *mod;
2424 	struct buffer buf = { };
2425 	char *kernel_read = NULL, *module_read = NULL;
2426 	char *dump_write = NULL, *files_source = NULL;
2427 	int opt;
2428 	int err;
2429 	struct ext_sym_list *extsym_iter;
2430 	struct ext_sym_list *extsym_start = NULL;
2431 
2432 	while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) {
2433 		switch (opt) {
2434 		case 'i':
2435 			kernel_read = optarg;
2436 			break;
2437 		case 'I':
2438 			module_read = optarg;
2439 			external_module = 1;
2440 			break;
2441 		case 'e':
2442 			external_module = 1;
2443 			extsym_iter =
2444 			   NOFAIL(malloc(sizeof(*extsym_iter)));
2445 			extsym_iter->next = extsym_start;
2446 			extsym_iter->file = optarg;
2447 			extsym_start = extsym_iter;
2448 			break;
2449 		case 'm':
2450 			modversions = 1;
2451 			break;
2452 		case 'n':
2453 			ignore_missing_files = 1;
2454 			break;
2455 		case 'o':
2456 			dump_write = optarg;
2457 			break;
2458 		case 'a':
2459 			all_versions = 1;
2460 			break;
2461 		case 's':
2462 			vmlinux_section_warnings = 0;
2463 			break;
2464 		case 'S':
2465 			sec_mismatch_verbose = 0;
2466 			break;
2467 		case 'T':
2468 			files_source = optarg;
2469 			break;
2470 		case 'w':
2471 			warn_unresolved = 1;
2472 			break;
2473 		case 'E':
2474 			sec_mismatch_fatal = 1;
2475 			break;
2476 		default:
2477 			exit(1);
2478 		}
2479 	}
2480 
2481 	if (kernel_read)
2482 		read_dump(kernel_read, 1);
2483 	if (module_read)
2484 		read_dump(module_read, 0);
2485 	while (extsym_start) {
2486 		read_dump(extsym_start->file, 0);
2487 		extsym_iter = extsym_start->next;
2488 		free(extsym_start);
2489 		extsym_start = extsym_iter;
2490 	}
2491 
2492 	while (optind < argc)
2493 		read_symbols(argv[optind++]);
2494 
2495 	if (files_source)
2496 		read_symbols_from_files(files_source);
2497 
2498 	for (mod = modules; mod; mod = mod->next) {
2499 		if (mod->skip)
2500 			continue;
2501 		check_exports(mod);
2502 	}
2503 
2504 	err = 0;
2505 
2506 	for (mod = modules; mod; mod = mod->next) {
2507 		char fname[PATH_MAX];
2508 
2509 		if (mod->skip)
2510 			continue;
2511 
2512 		buf.pos = 0;
2513 
2514 		err |= check_modname_len(mod);
2515 		add_header(&buf, mod);
2516 		add_intree_flag(&buf, !external_module);
2517 		add_retpoline(&buf);
2518 		add_staging_flag(&buf, mod->name);
2519 		err |= add_versions(&buf, mod);
2520 		add_depends(&buf, mod, modules);
2521 		add_moddevtable(&buf, mod);
2522 		add_srcversion(&buf, mod);
2523 
2524 		sprintf(fname, "%s.mod.c", mod->name);
2525 		write_if_changed(&buf, fname);
2526 	}
2527 	if (dump_write)
2528 		write_dump(dump_write);
2529 	if (sec_mismatch_count) {
2530 		if (!sec_mismatch_verbose) {
2531 			warn("modpost: Found %d section mismatch(es).\n"
2532 			     "To see full details build your kernel with:\n"
2533 			     "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
2534 			     sec_mismatch_count);
2535 		}
2536 		if (sec_mismatch_fatal) {
2537 			fatal("modpost: Section mismatches detected.\n"
2538 			      "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2539 		}
2540 	}
2541 	free(buf.p);
2542 
2543 	return err;
2544 }
2545