Linux Audio

Check our new training course

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