Re-enable CONFIG_MODVERSIONS in a slightly weaker form

This enables CONFIG_MODVERSIONS again, but allows for missing symbol CRC
information in order to work around the issue that newer binutils
versions seem to occasionally drop the CRC on the floor.  binutils 2.26
seems to work fine, while binutils 2.27 seems to break MODVERSIONS of
symbols that have been defined in assembler files.

[ We've had random missing CRC's before - it may be an old problem that
  just is now reliably triggered with the weak asm symbols and a new
  version of binutils ]

Some day I really do want to remove MODVERSIONS entirely.  Sadly, today
does not appear to be that day: Debian people apparently do want the
option to enable MODVERSIONS to make it easier to have external modules
across kernel versions, and this seems to be a fairly minimal fix for
the annoying problem.

Cc: Ben Hutchings <ben@decadent.org.uk>
Acked-by: Michal Marek <mmarek@suse.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Linus Torvalds 2016-11-29 15:20:14 -08:00
parent 22d3d4fbbd
commit faaae2a581
2 changed files with 3 additions and 3 deletions

View File

@ -1945,7 +1945,6 @@ config MODULE_FORCE_UNLOAD
config MODVERSIONS config MODVERSIONS
bool "Module versioning support" bool "Module versioning support"
depends on BROKEN
help help
Usually, you have to use modules compiled with your kernel. Usually, you have to use modules compiled with your kernel.
Saying Y here makes it sometimes possible to use modules Saying Y here makes it sometimes possible to use modules

View File

@ -1301,8 +1301,9 @@ static int check_version(Elf_Shdr *sechdrs,
goto bad_version; goto bad_version;
} }
pr_warn("%s: no symbol version for %s\n", mod->name, symname); /* Broken toolchain. Warn once, then let it go.. */
return 0; pr_warn_once("%s: no symbol version for %s\n", mod->name, symname);
return 1;
bad_version: bad_version:
pr_warn("%s: disagrees about version of symbol %s\n", pr_warn("%s: disagrees about version of symbol %s\n",