History

modpost: Allow extended modversions without basic MODVERSIONS

If you know that your kernel modules will only ever be loaded by a newer kernel, you can disable BASIC_MODVERSIONS to save space. This also allows easy creation of test modules to see how tooling will respond to modules that only have the new format.

Matthew Maurer committed 1 year ago

Commit e8639b71 parent fc7d5e33 files · +23 −2Browse files

Unified · Split

3 files
  1. kernel/module/Kconfig +15 −0
  2. scripts/Makefile.modpost +1 −0
  3. scripts/mod/modpost.c +7 −2
kernel/module/Kconfig+15−0
@@ -217,6 +217,21 @@ config EXTENDED_MODVERSIONS · 216 unmodified lines
217217 The most likely reason you would enable this is to enable Rust
218218 support. If unsure, say N.
219219
220+config BASIC_MODVERSIONS
221+ bool "Basic Module Versioning Support"
222+ depends on MODVERSIONS
223+ default y
224+ help
225+ This enables basic MODVERSIONS support, allowing older tools or
226+ kernels to potentially load modules.
227+
228+ Disabling this may cause older `modprobe` or `kmod` to be unable
229+ to read MODVERSIONS information from built modules. With this
230+ disabled, older kernels may treat this module as unversioned.
231+
232+ This is enabled by default when MODVERSIONS are enabled.
233+ If unsure, say Y.
234+
220235 config MODULE_SRCVERSION_ALL
221236 bool "Source checksum for all modules"
222237 help
scripts/Makefile.modpost+1−0
@@ -43,6 +43,7 @@ MODPOST = $(objtree)/scripts/mod/modpost · 42 unmodified lines
4343 modpost-args = \
4444 $(if $(CONFIG_MODULES),-M) \
4545 $(if $(CONFIG_MODVERSIONS),-m) \
46+ $(if $(CONFIG_BASIC_MODVERSIONS),-b) \
4647 $(if $(CONFIG_EXTENDED_MODVERSIONS),-x) \
4748 $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a) \
4849 $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E) \
scripts/mod/modpost.c+7−2
@@ -33,6 +33,8 @@ static bool module_enabled; · 32 unmodified lines
3333 static bool modversions;
3434 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
3535 static bool all_versions;
36+/* Is CONFIG_BASIC_MODVERSIONS set? */
37+static bool basic_modversions;
3638 /* Is CONFIG_EXTENDED_MODVERSIONS set? */
3739 static bool extended_modversions;
3840 /* If we are modposting external module set to 1 */
@@ -1857,7 +1859,7 @@ static void add_versions(struct buffer *b, struct module *mod) · 1818 unmodified lines
18571859 {
18581860 struct symbol *s;
18591861
1860− if (!modversions)
1862+ if (!basic_modversions)
18611863 return;
18621864
18631865 buf_printf(b, "\n");
@@ -2177,7 +2179,7 @@ int main(int argc, char **argv) · 313 unmodified lines
21772179 LIST_HEAD(dump_lists);
21782180 struct dump_list *dl, *dl2;
21792181
2180− while ((opt = getopt(argc, argv, "ei:MmnT:to:au:WwENd:x")) != -1) {
2182+ while ((opt = getopt(argc, argv, "ei:MmnT:to:au:WwENd:xb")) != -1) {
21812183 switch (opt) {
21822184 case 'e':
21832185 external_module = true;
@@ -2226,6 +2228,9 @@ int main(int argc, char **argv) · 42 unmodified lines
22262228 case 'd':
22272229 missing_namespace_deps = optarg;
22282230 break;
2231+ case 'b':
2232+ basic_modversions = true;
2233+ break;
22292234 case 'x':
22302235 extended_modversions = true;
22312236 break;