Linux Audio

Check our new training course

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