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