Messages in this thread Patch in this message | | | From | Rusty Russell <> | Date | Thu, 29 Jan 2009 00:05:35 +1030 | Subject | [PATCH 2/6] module: include struct modversion_info in module version check |
| |
With CONFIG_MODVERSIONS, we version 'struct module' using a dummy export, but other things matter too: we are about to change 'struct modversion_info' which means the layout of the __versions section would change, and this should be reflected in modversions.
So we rename 'struct_module' to 'module_layout' and include the 'struct modversion_info' in the signature. Now it's general we can add others later on without confusion.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> --- kernel/module.c | 11 ++++++----- scripts/mod/modpost.c | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/kernel/module.c b/kernel/module.c --- a/kernel/module.c +++ b/kernel/module.c @@ -1023,9 +1023,9 @@ static inline int check_modstruct_versio { const unsigned long *crc; - if (IS_ERR_VALUE(find_symbol("struct_module", NULL, &crc, true, false))) + if (IS_ERR_VALUE(find_symbol("module_layout", NULL, &crc, true, false))) BUG(); - return check_version(sechdrs, versindex, "struct_module", mod, crc); + return check_version(sechdrs, versindex, "module_layout", mod, crc); } /* First part is kernel version, which we ignore if module has crcs. */ @@ -2778,9 +2778,10 @@ void print_modules(void) } #ifdef CONFIG_MODVERSIONS -/* Generate the signature for struct module here, too, for modversions. */ -void struct_module(struct module *mod) { return; } -EXPORT_SYMBOL(struct_module); +/* Generate the signature for module structures here, too, for modversions. + * If these change, we don't want to try to parse the module. */ +void module_layout(struct module *mod, struct modversion_info *ver) { return; } +EXPORT_SYMBOL(module_layout); #endif #ifdef CONFIG_MARKERS diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1604,12 +1604,12 @@ static void read_symbols(char *modname) parse_elf_finish(&info); - /* Our trick to get versioning for struct_module - it's + /* Our trick to get versioning for module struct etc. - it's * never passed as an argument to an exported function, so * the automatic versioning doesn't pick it up, but it's really * important anyhow */ if (modversions) - mod->unres = alloc_symbol("struct_module", 0, mod->unres); + mod->unres = alloc_symbol("module_layout", 0, mod->unres); } #define SZ 500
| |