xref: /openbmc/linux/scripts/mod/modpost.c (revision 6b5fc336)
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 #define PRINTF __attribute__ ((format (printf, 1, 2)))
51 
52 PRINTF void fatal(const char *fmt, ...)
53 {
54 	va_list arglist;
55 
56 	fprintf(stderr, "FATAL: ");
57 
58 	va_start(arglist, fmt);
59 	vfprintf(stderr, fmt, arglist);
60 	va_end(arglist);
61 
62 	exit(1);
63 }
64 
65 PRINTF void warn(const char *fmt, ...)
66 {
67 	va_list arglist;
68 
69 	fprintf(stderr, "WARNING: ");
70 
71 	va_start(arglist, fmt);
72 	vfprintf(stderr, fmt, arglist);
73 	va_end(arglist);
74 }
75 
76 PRINTF void merror(const char *fmt, ...)
77 {
78 	va_list arglist;
79 
80 	fprintf(stderr, "ERROR: ");
81 
82 	va_start(arglist, fmt);
83 	vfprintf(stderr, fmt, arglist);
84 	va_end(arglist);
85 }
86 
87 static inline bool strends(const char *str, const char *postfix)
88 {
89 	if (strlen(str) < strlen(postfix))
90 		return false;
91 
92 	return strcmp(str + strlen(str) - strlen(postfix), postfix) == 0;
93 }
94 
95 static int is_vmlinux(const char *modname)
96 {
97 	const char *myname;
98 
99 	myname = strrchr(modname, '/');
100 	if (myname)
101 		myname++;
102 	else
103 		myname = modname;
104 
105 	return (strcmp(myname, "vmlinux") == 0) ||
106 	       (strcmp(myname, "vmlinux.o") == 0);
107 }
108 
109 void *do_nofail(void *ptr, const char *expr)
110 {
111 	if (!ptr)
112 		fatal("modpost: Memory allocation failure: %s.\n", expr);
113 
114 	return ptr;
115 }
116 
117 /* A list of all modules we processed */
118 static struct module *modules;
119 
120 static struct module *find_module(char *modname)
121 {
122 	struct module *mod;
123 
124 	for (mod = modules; mod; mod = mod->next)
125 		if (strcmp(mod->name, modname) == 0)
126 			break;
127 	return mod;
128 }
129 
130 static struct module *new_module(const char *modname)
131 {
132 	struct module *mod;
133 	char *p;
134 
135 	mod = NOFAIL(malloc(sizeof(*mod)));
136 	memset(mod, 0, sizeof(*mod));
137 	p = NOFAIL(strdup(modname));
138 
139 	/* strip trailing .o */
140 	if (strends(p, ".o")) {
141 		p[strlen(p) - 2] = '\0';
142 		mod->is_dot_o = 1;
143 	}
144 
145 	/* add to list */
146 	mod->name = p;
147 	mod->gpl_compatible = -1;
148 	mod->next = modules;
149 	modules = mod;
150 
151 	return mod;
152 }
153 
154 /* A hash of all exported symbols,
155  * struct symbol is also used for lists of unresolved symbols */
156 
157 #define SYMBOL_HASH_SIZE 1024
158 
159 struct symbol {
160 	struct symbol *next;
161 	struct module *module;
162 	unsigned int crc;
163 	int crc_valid;
164 	unsigned int weak:1;
165 	unsigned int vmlinux:1;    /* 1 if symbol is defined in vmlinux */
166 	unsigned int kernel:1;     /* 1 if symbol is from kernel
167 				    *  (only for external modules) **/
168 	unsigned int preloaded:1;  /* 1 if symbol from Module.symvers, or crc */
169 	enum export  export;       /* Type of export */
170 	char name[0];
171 };
172 
173 static struct symbol *symbolhash[SYMBOL_HASH_SIZE];
174 
175 /* This is based on the hash agorithm from gdbm, via tdb */
176 static inline unsigned int tdb_hash(const char *name)
177 {
178 	unsigned value;	/* Used to compute the hash value.  */
179 	unsigned   i;	/* Used to cycle through random values. */
180 
181 	/* Set the initial value from the key size. */
182 	for (value = 0x238F13AF * strlen(name), i = 0; name[i]; i++)
183 		value = (value + (((unsigned char *)name)[i] << (i*5 % 24)));
184 
185 	return (1103515243 * value + 12345);
186 }
187 
188 /**
189  * Allocate a new symbols for use in the hash of exported symbols or
190  * the list of unresolved symbols per module
191  **/
192 static struct symbol *alloc_symbol(const char *name, unsigned int weak,
193 				   struct symbol *next)
194 {
195 	struct symbol *s = NOFAIL(malloc(sizeof(*s) + strlen(name) + 1));
196 
197 	memset(s, 0, sizeof(*s));
198 	strcpy(s->name, name);
199 	s->weak = weak;
200 	s->next = next;
201 	return s;
202 }
203 
204 /* For the hash of exported symbols */
205 static struct symbol *new_symbol(const char *name, struct module *module,
206 				 enum export export)
207 {
208 	unsigned int hash;
209 	struct symbol *new;
210 
211 	hash = tdb_hash(name) % SYMBOL_HASH_SIZE;
212 	new = symbolhash[hash] = alloc_symbol(name, 0, symbolhash[hash]);
213 	new->module = module;
214 	new->export = export;
215 	return new;
216 }
217 
218 static struct symbol *find_symbol(const char *name)
219 {
220 	struct symbol *s;
221 
222 	/* For our purposes, .foo matches foo.  PPC64 needs this. */
223 	if (name[0] == '.')
224 		name++;
225 
226 	for (s = symbolhash[tdb_hash(name) % SYMBOL_HASH_SIZE]; s; s = s->next) {
227 		if (strcmp(s->name, name) == 0)
228 			return s;
229 	}
230 	return NULL;
231 }
232 
233 static const struct {
234 	const char *str;
235 	enum export export;
236 } export_list[] = {
237 	{ .str = "EXPORT_SYMBOL",            .export = export_plain },
238 	{ .str = "EXPORT_UNUSED_SYMBOL",     .export = export_unused },
239 	{ .str = "EXPORT_SYMBOL_GPL",        .export = export_gpl },
240 	{ .str = "EXPORT_UNUSED_SYMBOL_GPL", .export = export_unused_gpl },
241 	{ .str = "EXPORT_SYMBOL_GPL_FUTURE", .export = export_gpl_future },
242 	{ .str = "(unknown)",                .export = export_unknown },
243 };
244 
245 
246 static const char *export_str(enum export ex)
247 {
248 	return export_list[ex].str;
249 }
250 
251 static enum export export_no(const char *s)
252 {
253 	int i;
254 
255 	if (!s)
256 		return export_unknown;
257 	for (i = 0; export_list[i].export != export_unknown; i++) {
258 		if (strcmp(export_list[i].str, s) == 0)
259 			return export_list[i].export;
260 	}
261 	return export_unknown;
262 }
263 
264 static const char *sec_name(struct elf_info *elf, int secindex);
265 
266 #define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
267 
268 static enum export export_from_secname(struct elf_info *elf, unsigned int sec)
269 {
270 	const char *secname = sec_name(elf, sec);
271 
272 	if (strstarts(secname, "___ksymtab+"))
273 		return export_plain;
274 	else if (strstarts(secname, "___ksymtab_unused+"))
275 		return export_unused;
276 	else if (strstarts(secname, "___ksymtab_gpl+"))
277 		return export_gpl;
278 	else if (strstarts(secname, "___ksymtab_unused_gpl+"))
279 		return export_unused_gpl;
280 	else if (strstarts(secname, "___ksymtab_gpl_future+"))
281 		return export_gpl_future;
282 	else
283 		return export_unknown;
284 }
285 
286 static enum export export_from_sec(struct elf_info *elf, unsigned int sec)
287 {
288 	if (sec == elf->export_sec)
289 		return export_plain;
290 	else if (sec == elf->export_unused_sec)
291 		return export_unused;
292 	else if (sec == elf->export_gpl_sec)
293 		return export_gpl;
294 	else if (sec == elf->export_unused_gpl_sec)
295 		return export_unused_gpl;
296 	else if (sec == elf->export_gpl_future_sec)
297 		return export_gpl_future;
298 	else
299 		return export_unknown;
300 }
301 
302 /**
303  * Add an exported symbol - it may have already been added without a
304  * CRC, in this case just update the CRC
305  **/
306 static struct symbol *sym_add_exported(const char *name, struct module *mod,
307 				       enum export export)
308 {
309 	struct symbol *s = find_symbol(name);
310 
311 	if (!s) {
312 		s = new_symbol(name, mod, export);
313 	} else {
314 		if (!s->preloaded) {
315 			warn("%s: '%s' exported twice. Previous export "
316 			     "was in %s%s\n", mod->name, name,
317 			     s->module->name,
318 			     is_vmlinux(s->module->name) ?"":".ko");
319 		} else {
320 			/* In case Module.symvers was out of date */
321 			s->module = mod;
322 		}
323 	}
324 	s->preloaded = 0;
325 	s->vmlinux   = is_vmlinux(mod->name);
326 	s->kernel    = 0;
327 	s->export    = export;
328 	return s;
329 }
330 
331 static void sym_update_crc(const char *name, struct module *mod,
332 			   unsigned int crc, enum export export)
333 {
334 	struct symbol *s = find_symbol(name);
335 
336 	if (!s) {
337 		s = new_symbol(name, mod, export);
338 		/* Don't complain when we find it later. */
339 		s->preloaded = 1;
340 	}
341 	s->crc = crc;
342 	s->crc_valid = 1;
343 }
344 
345 void *grab_file(const char *filename, unsigned long *size)
346 {
347 	struct stat st;
348 	void *map = MAP_FAILED;
349 	int fd;
350 
351 	fd = open(filename, O_RDONLY);
352 	if (fd < 0)
353 		return NULL;
354 	if (fstat(fd, &st))
355 		goto failed;
356 
357 	*size = st.st_size;
358 	map = mmap(NULL, *size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
359 
360 failed:
361 	close(fd);
362 	if (map == MAP_FAILED)
363 		return NULL;
364 	return map;
365 }
366 
367 /**
368   * Return a copy of the next line in a mmap'ed file.
369   * spaces in the beginning of the line is trimmed away.
370   * Return a pointer to a static buffer.
371   **/
372 char *get_next_line(unsigned long *pos, void *file, unsigned long size)
373 {
374 	static char line[4096];
375 	int skip = 1;
376 	size_t len = 0;
377 	signed char *p = (signed char *)file + *pos;
378 	char *s = line;
379 
380 	for (; *pos < size ; (*pos)++) {
381 		if (skip && isspace(*p)) {
382 			p++;
383 			continue;
384 		}
385 		skip = 0;
386 		if (*p != '\n' && (*pos < size)) {
387 			len++;
388 			*s++ = *p++;
389 			if (len > 4095)
390 				break; /* Too long, stop */
391 		} else {
392 			/* End of string */
393 			*s = '\0';
394 			return line;
395 		}
396 	}
397 	/* End of buffer */
398 	return NULL;
399 }
400 
401 void release_file(void *file, unsigned long size)
402 {
403 	munmap(file, size);
404 }
405 
406 static int parse_elf(struct elf_info *info, const char *filename)
407 {
408 	unsigned int i;
409 	Elf_Ehdr *hdr;
410 	Elf_Shdr *sechdrs;
411 	Elf_Sym  *sym;
412 	const char *secstrings;
413 	unsigned int symtab_idx = ~0U, symtab_shndx_idx = ~0U;
414 
415 	hdr = grab_file(filename, &info->size);
416 	if (!hdr) {
417 		if (ignore_missing_files) {
418 			fprintf(stderr, "%s: %s (ignored)\n", filename,
419 				strerror(errno));
420 			return 0;
421 		}
422 		perror(filename);
423 		exit(1);
424 	}
425 	info->hdr = hdr;
426 	if (info->size < sizeof(*hdr)) {
427 		/* file too small, assume this is an empty .o file */
428 		return 0;
429 	}
430 	/* Is this a valid ELF file? */
431 	if ((hdr->e_ident[EI_MAG0] != ELFMAG0) ||
432 	    (hdr->e_ident[EI_MAG1] != ELFMAG1) ||
433 	    (hdr->e_ident[EI_MAG2] != ELFMAG2) ||
434 	    (hdr->e_ident[EI_MAG3] != ELFMAG3)) {
435 		/* Not an ELF file - silently ignore it */
436 		return 0;
437 	}
438 	/* Fix endianness in ELF header */
439 	hdr->e_type      = TO_NATIVE(hdr->e_type);
440 	hdr->e_machine   = TO_NATIVE(hdr->e_machine);
441 	hdr->e_version   = TO_NATIVE(hdr->e_version);
442 	hdr->e_entry     = TO_NATIVE(hdr->e_entry);
443 	hdr->e_phoff     = TO_NATIVE(hdr->e_phoff);
444 	hdr->e_shoff     = TO_NATIVE(hdr->e_shoff);
445 	hdr->e_flags     = TO_NATIVE(hdr->e_flags);
446 	hdr->e_ehsize    = TO_NATIVE(hdr->e_ehsize);
447 	hdr->e_phentsize = TO_NATIVE(hdr->e_phentsize);
448 	hdr->e_phnum     = TO_NATIVE(hdr->e_phnum);
449 	hdr->e_shentsize = TO_NATIVE(hdr->e_shentsize);
450 	hdr->e_shnum     = TO_NATIVE(hdr->e_shnum);
451 	hdr->e_shstrndx  = TO_NATIVE(hdr->e_shstrndx);
452 	sechdrs = (void *)hdr + hdr->e_shoff;
453 	info->sechdrs = sechdrs;
454 
455 	/* Check if file offset is correct */
456 	if (hdr->e_shoff > info->size) {
457 		fatal("section header offset=%lu in file '%s' is bigger than "
458 		      "filesize=%lu\n", (unsigned long)hdr->e_shoff,
459 		      filename, info->size);
460 		return 0;
461 	}
462 
463 	if (hdr->e_shnum == SHN_UNDEF) {
464 		/*
465 		 * There are more than 64k sections,
466 		 * read count from .sh_size.
467 		 */
468 		info->num_sections = TO_NATIVE(sechdrs[0].sh_size);
469 	}
470 	else {
471 		info->num_sections = hdr->e_shnum;
472 	}
473 	if (hdr->e_shstrndx == SHN_XINDEX) {
474 		info->secindex_strings = TO_NATIVE(sechdrs[0].sh_link);
475 	}
476 	else {
477 		info->secindex_strings = hdr->e_shstrndx;
478 	}
479 
480 	/* Fix endianness in section headers */
481 	for (i = 0; i < info->num_sections; i++) {
482 		sechdrs[i].sh_name      = TO_NATIVE(sechdrs[i].sh_name);
483 		sechdrs[i].sh_type      = TO_NATIVE(sechdrs[i].sh_type);
484 		sechdrs[i].sh_flags     = TO_NATIVE(sechdrs[i].sh_flags);
485 		sechdrs[i].sh_addr      = TO_NATIVE(sechdrs[i].sh_addr);
486 		sechdrs[i].sh_offset    = TO_NATIVE(sechdrs[i].sh_offset);
487 		sechdrs[i].sh_size      = TO_NATIVE(sechdrs[i].sh_size);
488 		sechdrs[i].sh_link      = TO_NATIVE(sechdrs[i].sh_link);
489 		sechdrs[i].sh_info      = TO_NATIVE(sechdrs[i].sh_info);
490 		sechdrs[i].sh_addralign = TO_NATIVE(sechdrs[i].sh_addralign);
491 		sechdrs[i].sh_entsize   = TO_NATIVE(sechdrs[i].sh_entsize);
492 	}
493 	/* Find symbol table. */
494 	secstrings = (void *)hdr + sechdrs[info->secindex_strings].sh_offset;
495 	for (i = 1; i < info->num_sections; i++) {
496 		const char *secname;
497 		int nobits = sechdrs[i].sh_type == SHT_NOBITS;
498 
499 		if (!nobits && sechdrs[i].sh_offset > info->size) {
500 			fatal("%s is truncated. sechdrs[i].sh_offset=%lu > "
501 			      "sizeof(*hrd)=%zu\n", filename,
502 			      (unsigned long)sechdrs[i].sh_offset,
503 			      sizeof(*hdr));
504 			return 0;
505 		}
506 		secname = secstrings + sechdrs[i].sh_name;
507 		if (strcmp(secname, ".modinfo") == 0) {
508 			if (nobits)
509 				fatal("%s has NOBITS .modinfo\n", filename);
510 			info->modinfo = (void *)hdr + sechdrs[i].sh_offset;
511 			info->modinfo_len = sechdrs[i].sh_size;
512 		} else if (strcmp(secname, "__ksymtab") == 0)
513 			info->export_sec = i;
514 		else if (strcmp(secname, "__ksymtab_unused") == 0)
515 			info->export_unused_sec = i;
516 		else if (strcmp(secname, "__ksymtab_gpl") == 0)
517 			info->export_gpl_sec = i;
518 		else if (strcmp(secname, "__ksymtab_unused_gpl") == 0)
519 			info->export_unused_gpl_sec = i;
520 		else if (strcmp(secname, "__ksymtab_gpl_future") == 0)
521 			info->export_gpl_future_sec = i;
522 
523 		if (sechdrs[i].sh_type == SHT_SYMTAB) {
524 			unsigned int sh_link_idx;
525 			symtab_idx = i;
526 			info->symtab_start = (void *)hdr +
527 			    sechdrs[i].sh_offset;
528 			info->symtab_stop  = (void *)hdr +
529 			    sechdrs[i].sh_offset + sechdrs[i].sh_size;
530 			sh_link_idx = sechdrs[i].sh_link;
531 			info->strtab       = (void *)hdr +
532 			    sechdrs[sh_link_idx].sh_offset;
533 		}
534 
535 		/* 32bit section no. table? ("more than 64k sections") */
536 		if (sechdrs[i].sh_type == SHT_SYMTAB_SHNDX) {
537 			symtab_shndx_idx = i;
538 			info->symtab_shndx_start = (void *)hdr +
539 			    sechdrs[i].sh_offset;
540 			info->symtab_shndx_stop  = (void *)hdr +
541 			    sechdrs[i].sh_offset + sechdrs[i].sh_size;
542 		}
543 	}
544 	if (!info->symtab_start)
545 		fatal("%s has no symtab?\n", filename);
546 
547 	/* Fix endianness in symbols */
548 	for (sym = info->symtab_start; sym < info->symtab_stop; sym++) {
549 		sym->st_shndx = TO_NATIVE(sym->st_shndx);
550 		sym->st_name  = TO_NATIVE(sym->st_name);
551 		sym->st_value = TO_NATIVE(sym->st_value);
552 		sym->st_size  = TO_NATIVE(sym->st_size);
553 	}
554 
555 	if (symtab_shndx_idx != ~0U) {
556 		Elf32_Word *p;
557 		if (symtab_idx != sechdrs[symtab_shndx_idx].sh_link)
558 			fatal("%s: SYMTAB_SHNDX has bad sh_link: %u!=%u\n",
559 			      filename, sechdrs[symtab_shndx_idx].sh_link,
560 			      symtab_idx);
561 		/* Fix endianness */
562 		for (p = info->symtab_shndx_start; p < info->symtab_shndx_stop;
563 		     p++)
564 			*p = TO_NATIVE(*p);
565 	}
566 
567 	return 1;
568 }
569 
570 static void parse_elf_finish(struct elf_info *info)
571 {
572 	release_file(info->hdr, info->size);
573 }
574 
575 static int ignore_undef_symbol(struct elf_info *info, const char *symname)
576 {
577 	/* ignore __this_module, it will be resolved shortly */
578 	if (strcmp(symname, VMLINUX_SYMBOL_STR(__this_module)) == 0)
579 		return 1;
580 	/* ignore global offset table */
581 	if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0)
582 		return 1;
583 	if (info->hdr->e_machine == EM_PPC)
584 		/* Special register function linked on all modules during final link of .ko */
585 		if (strncmp(symname, "_restgpr_", sizeof("_restgpr_") - 1) == 0 ||
586 		    strncmp(symname, "_savegpr_", sizeof("_savegpr_") - 1) == 0 ||
587 		    strncmp(symname, "_rest32gpr_", sizeof("_rest32gpr_") - 1) == 0 ||
588 		    strncmp(symname, "_save32gpr_", sizeof("_save32gpr_") - 1) == 0 ||
589 		    strncmp(symname, "_restvr_", sizeof("_restvr_") - 1) == 0 ||
590 		    strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0)
591 			return 1;
592 	if (info->hdr->e_machine == EM_PPC64)
593 		/* Special register function linked on all modules during final link of .ko */
594 		if (strncmp(symname, "_restgpr0_", sizeof("_restgpr0_") - 1) == 0 ||
595 		    strncmp(symname, "_savegpr0_", sizeof("_savegpr0_") - 1) == 0 ||
596 		    strncmp(symname, "_restvr_", sizeof("_restvr_") - 1) == 0 ||
597 		    strncmp(symname, "_savevr_", sizeof("_savevr_") - 1) == 0 ||
598 		    strcmp(symname, ".TOC.") == 0)
599 			return 1;
600 	/* Do not ignore this symbol */
601 	return 0;
602 }
603 
604 #define CRC_PFX     VMLINUX_SYMBOL_STR(__crc_)
605 #define KSYMTAB_PFX VMLINUX_SYMBOL_STR(__ksymtab_)
606 
607 static void handle_modversions(struct module *mod, struct elf_info *info,
608 			       Elf_Sym *sym, const char *symname)
609 {
610 	unsigned int crc;
611 	enum export export;
612 	bool is_crc = false;
613 
614 	if ((!is_vmlinux(mod->name) || mod->is_dot_o) &&
615 	    strncmp(symname, "__ksymtab", 9) == 0)
616 		export = export_from_secname(info, get_secindex(info, sym));
617 	else
618 		export = export_from_sec(info, get_secindex(info, sym));
619 
620 	/* CRC'd symbol */
621 	if (strncmp(symname, CRC_PFX, strlen(CRC_PFX)) == 0) {
622 		is_crc = true;
623 		crc = (unsigned int) sym->st_value;
624 		if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS) {
625 			unsigned int *crcp;
626 
627 			/* symbol points to the CRC in the ELF object */
628 			crcp = (void *)info->hdr + sym->st_value +
629 			       info->sechdrs[sym->st_shndx].sh_offset -
630 			       (info->hdr->e_type != ET_REL ?
631 				info->sechdrs[sym->st_shndx].sh_addr : 0);
632 			crc = *crcp;
633 		}
634 		sym_update_crc(symname + strlen(CRC_PFX), mod, crc,
635 				export);
636 	}
637 
638 	switch (sym->st_shndx) {
639 	case SHN_COMMON:
640 		if (!strncmp(symname, "__gnu_lto_", sizeof("__gnu_lto_")-1)) {
641 			/* Should warn here, but modpost runs before the linker */
642 		} else
643 			warn("\"%s\" [%s] is COMMON symbol\n", symname, mod->name);
644 		break;
645 	case SHN_UNDEF:
646 		/* undefined symbol */
647 		if (ELF_ST_BIND(sym->st_info) != STB_GLOBAL &&
648 		    ELF_ST_BIND(sym->st_info) != STB_WEAK)
649 			break;
650 		if (ignore_undef_symbol(info, symname))
651 			break;
652 /* cope with newer glibc (2.3.4 or higher) STT_ definition in elf.h */
653 #if defined(STT_REGISTER) || defined(STT_SPARC_REGISTER)
654 /* add compatibility with older glibc */
655 #ifndef STT_SPARC_REGISTER
656 #define STT_SPARC_REGISTER STT_REGISTER
657 #endif
658 		if (info->hdr->e_machine == EM_SPARC ||
659 		    info->hdr->e_machine == EM_SPARCV9) {
660 			/* Ignore register directives. */
661 			if (ELF_ST_TYPE(sym->st_info) == STT_SPARC_REGISTER)
662 				break;
663 			if (symname[0] == '.') {
664 				char *munged = strdup(symname);
665 				munged[0] = '_';
666 				munged[1] = toupper(munged[1]);
667 				symname = munged;
668 			}
669 		}
670 #endif
671 
672 #ifdef CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
673 		if (symname[0] != '_')
674 			break;
675 		else
676 			symname++;
677 #endif
678 		if (is_crc) {
679 			const char *e = is_vmlinux(mod->name) ?"":".ko";
680 			warn("EXPORT symbol \"%s\" [%s%s] version generation failed, symbol will not be versioned.\n", symname + strlen(CRC_PFX), mod->name, e);
681 		}
682 		mod->unres = alloc_symbol(symname,
683 					  ELF_ST_BIND(sym->st_info) == STB_WEAK,
684 					  mod->unres);
685 		break;
686 	default:
687 		/* All exported symbols */
688 		if (strncmp(symname, KSYMTAB_PFX, strlen(KSYMTAB_PFX)) == 0) {
689 			sym_add_exported(symname + strlen(KSYMTAB_PFX), mod,
690 					export);
691 		}
692 		if (strcmp(symname, VMLINUX_SYMBOL_STR(init_module)) == 0)
693 			mod->has_init = 1;
694 		if (strcmp(symname, VMLINUX_SYMBOL_STR(cleanup_module)) == 0)
695 			mod->has_cleanup = 1;
696 		break;
697 	}
698 }
699 
700 /**
701  * Parse tag=value strings from .modinfo section
702  **/
703 static char *next_string(char *string, unsigned long *secsize)
704 {
705 	/* Skip non-zero chars */
706 	while (string[0]) {
707 		string++;
708 		if ((*secsize)-- <= 1)
709 			return NULL;
710 	}
711 
712 	/* Skip any zero padding. */
713 	while (!string[0]) {
714 		string++;
715 		if ((*secsize)-- <= 1)
716 			return NULL;
717 	}
718 	return string;
719 }
720 
721 static char *get_next_modinfo(void *modinfo, unsigned long modinfo_len,
722 			      const char *tag, char *info)
723 {
724 	char *p;
725 	unsigned int taglen = strlen(tag);
726 	unsigned long size = modinfo_len;
727 
728 	if (info) {
729 		size -= info - (char *)modinfo;
730 		modinfo = next_string(info, &size);
731 	}
732 
733 	for (p = modinfo; p; p = next_string(p, &size)) {
734 		if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
735 			return p + taglen + 1;
736 	}
737 	return NULL;
738 }
739 
740 static char *get_modinfo(void *modinfo, unsigned long modinfo_len,
741 			 const char *tag)
742 
743 {
744 	return get_next_modinfo(modinfo, modinfo_len, tag, NULL);
745 }
746 
747 /**
748  * Test if string s ends in string sub
749  * return 0 if match
750  **/
751 static int strrcmp(const char *s, const char *sub)
752 {
753 	int slen, sublen;
754 
755 	if (!s || !sub)
756 		return 1;
757 
758 	slen = strlen(s);
759 	sublen = strlen(sub);
760 
761 	if ((slen == 0) || (sublen == 0))
762 		return 1;
763 
764 	if (sublen > slen)
765 		return 1;
766 
767 	return memcmp(s + slen - sublen, sub, sublen);
768 }
769 
770 static const char *sym_name(struct elf_info *elf, Elf_Sym *sym)
771 {
772 	if (sym)
773 		return elf->strtab + sym->st_name;
774 	else
775 		return "(unknown)";
776 }
777 
778 static const char *sec_name(struct elf_info *elf, int secindex)
779 {
780 	Elf_Shdr *sechdrs = elf->sechdrs;
781 	return (void *)elf->hdr +
782 		elf->sechdrs[elf->secindex_strings].sh_offset +
783 		sechdrs[secindex].sh_name;
784 }
785 
786 static const char *sech_name(struct elf_info *elf, Elf_Shdr *sechdr)
787 {
788 	return (void *)elf->hdr +
789 		elf->sechdrs[elf->secindex_strings].sh_offset +
790 		sechdr->sh_name;
791 }
792 
793 /* The pattern is an array of simple patterns.
794  * "foo" will match an exact string equal to "foo"
795  * "*foo" will match a string that ends with "foo"
796  * "foo*" will match a string that begins with "foo"
797  * "*foo*" will match a string that contains "foo"
798  */
799 static int match(const char *sym, const char * const pat[])
800 {
801 	const char *p;
802 	while (*pat) {
803 		p = *pat++;
804 		const char *endp = p + strlen(p) - 1;
805 
806 		/* "*foo*" */
807 		if (*p == '*' && *endp == '*') {
808 			char *here, *bare = strndup(p + 1, strlen(p) - 2);
809 
810 			here = strstr(sym, bare);
811 			free(bare);
812 			if (here != NULL)
813 				return 1;
814 		}
815 		/* "*foo" */
816 		else if (*p == '*') {
817 			if (strrcmp(sym, p + 1) == 0)
818 				return 1;
819 		}
820 		/* "foo*" */
821 		else if (*endp == '*') {
822 			if (strncmp(sym, p, strlen(p) - 1) == 0)
823 				return 1;
824 		}
825 		/* no wildcards */
826 		else {
827 			if (strcmp(p, sym) == 0)
828 				return 1;
829 		}
830 	}
831 	/* no match */
832 	return 0;
833 }
834 
835 /* sections that we do not want to do full section mismatch check on */
836 static const char *const section_white_list[] =
837 {
838 	".comment*",
839 	".debug*",
840 	".cranges",		/* sh64 */
841 	".zdebug*",		/* Compressed debug sections. */
842 	".GCC-command-line",	/* mn10300 */
843 	".GCC.command.line",	/* record-gcc-switches, non mn10300 */
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 and
1107 	 * mn10300 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 (info.modinfo && !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 /**
2120  * Header for the generated file
2121  **/
2122 static void add_header(struct buffer *b, struct module *mod)
2123 {
2124 	buf_printf(b, "#include <linux/module.h>\n");
2125 	buf_printf(b, "#include <linux/vermagic.h>\n");
2126 	buf_printf(b, "#include <linux/compiler.h>\n");
2127 	buf_printf(b, "\n");
2128 	buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
2129 	buf_printf(b, "MODULE_INFO(name, KBUILD_MODNAME);\n");
2130 	buf_printf(b, "\n");
2131 	buf_printf(b, "__visible struct module __this_module\n");
2132 	buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
2133 	buf_printf(b, "\t.name = KBUILD_MODNAME,\n");
2134 	if (mod->has_init)
2135 		buf_printf(b, "\t.init = init_module,\n");
2136 	if (mod->has_cleanup)
2137 		buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n"
2138 			      "\t.exit = cleanup_module,\n"
2139 			      "#endif\n");
2140 	buf_printf(b, "\t.arch = MODULE_ARCH_INIT,\n");
2141 	buf_printf(b, "};\n");
2142 }
2143 
2144 static void add_intree_flag(struct buffer *b, int is_intree)
2145 {
2146 	if (is_intree)
2147 		buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
2148 }
2149 
2150 static void add_staging_flag(struct buffer *b, const char *name)
2151 {
2152 	static const char *staging_dir = "drivers/staging";
2153 
2154 	if (strncmp(staging_dir, name, strlen(staging_dir)) == 0)
2155 		buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
2156 }
2157 
2158 /* In kernel, this size is defined in linux/module.h;
2159  * here we use Elf_Addr instead of long for covering cross-compile
2160  */
2161 #define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
2162 
2163 /**
2164  * Record CRCs for unresolved symbols
2165  **/
2166 static int add_versions(struct buffer *b, struct module *mod)
2167 {
2168 	struct symbol *s, *exp;
2169 	int err = 0;
2170 
2171 	for (s = mod->unres; s; s = s->next) {
2172 		exp = find_symbol(s->name);
2173 		if (!exp || exp->module == mod) {
2174 			if (have_vmlinux && !s->weak) {
2175 				if (warn_unresolved) {
2176 					warn("\"%s\" [%s.ko] undefined!\n",
2177 					     s->name, mod->name);
2178 				} else {
2179 					merror("\"%s\" [%s.ko] undefined!\n",
2180 					       s->name, mod->name);
2181 					err = 1;
2182 				}
2183 			}
2184 			continue;
2185 		}
2186 		s->module = exp->module;
2187 		s->crc_valid = exp->crc_valid;
2188 		s->crc = exp->crc;
2189 	}
2190 
2191 	if (!modversions)
2192 		return err;
2193 
2194 	buf_printf(b, "\n");
2195 	buf_printf(b, "static const struct modversion_info ____versions[]\n");
2196 	buf_printf(b, "__used\n");
2197 	buf_printf(b, "__attribute__((section(\"__versions\"))) = {\n");
2198 
2199 	for (s = mod->unres; s; s = s->next) {
2200 		if (!s->module)
2201 			continue;
2202 		if (!s->crc_valid) {
2203 			warn("\"%s\" [%s.ko] has no CRC!\n",
2204 				s->name, mod->name);
2205 			continue;
2206 		}
2207 		if (strlen(s->name) >= MODULE_NAME_LEN) {
2208 			merror("too long symbol \"%s\" [%s.ko]\n",
2209 			       s->name, mod->name);
2210 			err = 1;
2211 			break;
2212 		}
2213 		buf_printf(b, "\t{ %#8x, __VMLINUX_SYMBOL_STR(%s) },\n",
2214 			   s->crc, s->name);
2215 	}
2216 
2217 	buf_printf(b, "};\n");
2218 
2219 	return err;
2220 }
2221 
2222 static void add_depends(struct buffer *b, struct module *mod,
2223 			struct module *modules)
2224 {
2225 	struct symbol *s;
2226 	struct module *m;
2227 	int first = 1;
2228 
2229 	for (m = modules; m; m = m->next)
2230 		m->seen = is_vmlinux(m->name);
2231 
2232 	buf_printf(b, "\n");
2233 	buf_printf(b, "static const char __module_depends[]\n");
2234 	buf_printf(b, "__used\n");
2235 	buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
2236 	buf_printf(b, "\"depends=");
2237 	for (s = mod->unres; s; s = s->next) {
2238 		const char *p;
2239 		if (!s->module)
2240 			continue;
2241 
2242 		if (s->module->seen)
2243 			continue;
2244 
2245 		s->module->seen = 1;
2246 		p = strrchr(s->module->name, '/');
2247 		if (p)
2248 			p++;
2249 		else
2250 			p = s->module->name;
2251 		buf_printf(b, "%s%s", first ? "" : ",", p);
2252 		first = 0;
2253 	}
2254 	buf_printf(b, "\";\n");
2255 }
2256 
2257 static void add_srcversion(struct buffer *b, struct module *mod)
2258 {
2259 	if (mod->srcversion[0]) {
2260 		buf_printf(b, "\n");
2261 		buf_printf(b, "MODULE_INFO(srcversion, \"%s\");\n",
2262 			   mod->srcversion);
2263 	}
2264 }
2265 
2266 static void write_if_changed(struct buffer *b, const char *fname)
2267 {
2268 	char *tmp;
2269 	FILE *file;
2270 	struct stat st;
2271 
2272 	file = fopen(fname, "r");
2273 	if (!file)
2274 		goto write;
2275 
2276 	if (fstat(fileno(file), &st) < 0)
2277 		goto close_write;
2278 
2279 	if (st.st_size != b->pos)
2280 		goto close_write;
2281 
2282 	tmp = NOFAIL(malloc(b->pos));
2283 	if (fread(tmp, 1, b->pos, file) != b->pos)
2284 		goto free_write;
2285 
2286 	if (memcmp(tmp, b->p, b->pos) != 0)
2287 		goto free_write;
2288 
2289 	free(tmp);
2290 	fclose(file);
2291 	return;
2292 
2293  free_write:
2294 	free(tmp);
2295  close_write:
2296 	fclose(file);
2297  write:
2298 	file = fopen(fname, "w");
2299 	if (!file) {
2300 		perror(fname);
2301 		exit(1);
2302 	}
2303 	if (fwrite(b->p, 1, b->pos, file) != b->pos) {
2304 		perror(fname);
2305 		exit(1);
2306 	}
2307 	fclose(file);
2308 }
2309 
2310 /* parse Module.symvers file. line format:
2311  * 0x12345678<tab>symbol<tab>module[[<tab>export]<tab>something]
2312  **/
2313 static void read_dump(const char *fname, unsigned int kernel)
2314 {
2315 	unsigned long size, pos = 0;
2316 	void *file = grab_file(fname, &size);
2317 	char *line;
2318 
2319 	if (!file)
2320 		/* No symbol versions, silently ignore */
2321 		return;
2322 
2323 	while ((line = get_next_line(&pos, file, size))) {
2324 		char *symname, *modname, *d, *export, *end;
2325 		unsigned int crc;
2326 		struct module *mod;
2327 		struct symbol *s;
2328 
2329 		if (!(symname = strchr(line, '\t')))
2330 			goto fail;
2331 		*symname++ = '\0';
2332 		if (!(modname = strchr(symname, '\t')))
2333 			goto fail;
2334 		*modname++ = '\0';
2335 		if ((export = strchr(modname, '\t')) != NULL)
2336 			*export++ = '\0';
2337 		if (export && ((end = strchr(export, '\t')) != NULL))
2338 			*end = '\0';
2339 		crc = strtoul(line, &d, 16);
2340 		if (*symname == '\0' || *modname == '\0' || *d != '\0')
2341 			goto fail;
2342 		mod = find_module(modname);
2343 		if (!mod) {
2344 			if (is_vmlinux(modname))
2345 				have_vmlinux = 1;
2346 			mod = new_module(modname);
2347 			mod->skip = 1;
2348 		}
2349 		s = sym_add_exported(symname, mod, export_no(export));
2350 		s->kernel    = kernel;
2351 		s->preloaded = 1;
2352 		sym_update_crc(symname, mod, crc, export_no(export));
2353 	}
2354 	release_file(file, size);
2355 	return;
2356 fail:
2357 	release_file(file, size);
2358 	fatal("parse error in symbol dump file\n");
2359 }
2360 
2361 /* For normal builds always dump all symbols.
2362  * For external modules only dump symbols
2363  * that are not read from kernel Module.symvers.
2364  **/
2365 static int dump_sym(struct symbol *sym)
2366 {
2367 	if (!external_module)
2368 		return 1;
2369 	if (sym->vmlinux || sym->kernel)
2370 		return 0;
2371 	return 1;
2372 }
2373 
2374 static void write_dump(const char *fname)
2375 {
2376 	struct buffer buf = { };
2377 	struct symbol *symbol;
2378 	int n;
2379 
2380 	for (n = 0; n < SYMBOL_HASH_SIZE ; n++) {
2381 		symbol = symbolhash[n];
2382 		while (symbol) {
2383 			if (dump_sym(symbol))
2384 				buf_printf(&buf, "0x%08x\t%s\t%s\t%s\n",
2385 					symbol->crc, symbol->name,
2386 					symbol->module->name,
2387 					export_str(symbol->export));
2388 			symbol = symbol->next;
2389 		}
2390 	}
2391 	write_if_changed(&buf, fname);
2392 	free(buf.p);
2393 }
2394 
2395 struct ext_sym_list {
2396 	struct ext_sym_list *next;
2397 	const char *file;
2398 };
2399 
2400 int main(int argc, char **argv)
2401 {
2402 	struct module *mod;
2403 	struct buffer buf = { };
2404 	char *kernel_read = NULL, *module_read = NULL;
2405 	char *dump_write = NULL, *files_source = NULL;
2406 	int opt;
2407 	int err;
2408 	struct ext_sym_list *extsym_iter;
2409 	struct ext_sym_list *extsym_start = NULL;
2410 
2411 	while ((opt = getopt(argc, argv, "i:I:e:mnsST:o:awM:K:E")) != -1) {
2412 		switch (opt) {
2413 		case 'i':
2414 			kernel_read = optarg;
2415 			break;
2416 		case 'I':
2417 			module_read = optarg;
2418 			external_module = 1;
2419 			break;
2420 		case 'e':
2421 			external_module = 1;
2422 			extsym_iter =
2423 			   NOFAIL(malloc(sizeof(*extsym_iter)));
2424 			extsym_iter->next = extsym_start;
2425 			extsym_iter->file = optarg;
2426 			extsym_start = extsym_iter;
2427 			break;
2428 		case 'm':
2429 			modversions = 1;
2430 			break;
2431 		case 'n':
2432 			ignore_missing_files = 1;
2433 			break;
2434 		case 'o':
2435 			dump_write = optarg;
2436 			break;
2437 		case 'a':
2438 			all_versions = 1;
2439 			break;
2440 		case 's':
2441 			vmlinux_section_warnings = 0;
2442 			break;
2443 		case 'S':
2444 			sec_mismatch_verbose = 0;
2445 			break;
2446 		case 'T':
2447 			files_source = optarg;
2448 			break;
2449 		case 'w':
2450 			warn_unresolved = 1;
2451 			break;
2452 		case 'E':
2453 			sec_mismatch_fatal = 1;
2454 			break;
2455 		default:
2456 			exit(1);
2457 		}
2458 	}
2459 
2460 	if (kernel_read)
2461 		read_dump(kernel_read, 1);
2462 	if (module_read)
2463 		read_dump(module_read, 0);
2464 	while (extsym_start) {
2465 		read_dump(extsym_start->file, 0);
2466 		extsym_iter = extsym_start->next;
2467 		free(extsym_start);
2468 		extsym_start = extsym_iter;
2469 	}
2470 
2471 	while (optind < argc)
2472 		read_symbols(argv[optind++]);
2473 
2474 	if (files_source)
2475 		read_symbols_from_files(files_source);
2476 
2477 	for (mod = modules; mod; mod = mod->next) {
2478 		if (mod->skip)
2479 			continue;
2480 		check_exports(mod);
2481 	}
2482 
2483 	err = 0;
2484 
2485 	for (mod = modules; mod; mod = mod->next) {
2486 		char fname[PATH_MAX];
2487 
2488 		if (mod->skip)
2489 			continue;
2490 
2491 		buf.pos = 0;
2492 
2493 		add_header(&buf, mod);
2494 		add_intree_flag(&buf, !external_module);
2495 		add_staging_flag(&buf, mod->name);
2496 		err |= add_versions(&buf, mod);
2497 		add_depends(&buf, mod, modules);
2498 		add_moddevtable(&buf, mod);
2499 		add_srcversion(&buf, mod);
2500 
2501 		sprintf(fname, "%s.mod.c", mod->name);
2502 		write_if_changed(&buf, fname);
2503 	}
2504 	if (dump_write)
2505 		write_dump(dump_write);
2506 	if (sec_mismatch_count) {
2507 		if (!sec_mismatch_verbose) {
2508 			warn("modpost: Found %d section mismatch(es).\n"
2509 			     "To see full details build your kernel with:\n"
2510 			     "'make CONFIG_DEBUG_SECTION_MISMATCH=y'\n",
2511 			     sec_mismatch_count);
2512 		}
2513 		if (sec_mismatch_fatal) {
2514 			fatal("modpost: Section mismatches detected.\n"
2515 			      "Set CONFIG_SECTION_MISMATCH_WARN_ONLY=y to allow them.\n");
2516 		}
2517 	}
2518 	free(buf.p);
2519 
2520 	return err;
2521 }
2522