58 lines
2.1 KiB
Diff
58 lines
2.1 KiB
Diff
From: Linus Torvalds <torvalds@linux-foundation.org>
|
|
Date: Tue, 29 Nov 2016 15:20:14 -0800
|
|
Subject: Re-enable CONFIG_MODVERSIONS in a slightly weaker form
|
|
Origin: https://git.kernel.org/linus/faaae2a581435f32781a105dda3501df388fddcb
|
|
|
|
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>
|
|
---
|
|
init/Kconfig | 1 -
|
|
kernel/module.c | 5 +++--
|
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/init/Kconfig b/init/Kconfig
|
|
index c4fbc1e55c25..34407f15e6d3 100644
|
|
--- a/init/Kconfig
|
|
+++ b/init/Kconfig
|
|
@@ -1945,7 +1945,6 @@ config MODULE_FORCE_UNLOAD
|
|
|
|
config MODVERSIONS
|
|
bool "Module versioning support"
|
|
- depends on BROKEN
|
|
help
|
|
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 f57dd63186e6..0e54d5bf0097 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;
|
|
|
|
bad_version:
|
|
pr_warn("%s: disagrees about version of symbol %s\n",
|