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