Re-enable CONFIG_MODVERSIONS in a slightly weaker form

Linux Kernel / Linux Kernel - Linus Torvalds [] - 29 November 2016 18:01 EST

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


diff --git a/init/Kconfig b/init/Kconfig
index c4fbc1e..34407f1 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1945,7 +1945,6 @@ config MODULE_FORCE_UNLOAD

bool "Module versioning support"
- depends on BROKEN
Usually, you have to use modules compiled with your kernel.
Saying Y here makes it sometimes possible to use modules
diff --git a/kernel/module.c b/kernel/module.c
index f57dd63..0e54d5b 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1301,8 +1301,9 @@ static int check_version(Elf_Shdr *sechdrs,
goto bad_version;

- pr_warn("%s: no symbol version for %s\n", mod->name, symname);
- return 0;
+ /* Broken toolchain. Warn once, then let it go.. */
+ pr_warn_once("%s: no symbol version for %s\n", mod->name, symname);
+ return 1;

pr_warn("%s: disagrees about version of symbol %s\n",

faaae2a Re-enable CONFIG_MODVERSIONS in a slightly weaker form
init/Kconfig | 1 -
kernel/module.c | 5 +++--
2 files changed, 3 insertions(+), 3 deletions(-)


  • Share