lkml.org 
[lkml]   [2011]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] module: Fix bug: read __param section as pointers to object
Date
Recent changes in commit 3834583b causes module parameters to be stored
in the __param section as pointer to struct instead of the struct itself.
module.c was still reading the section as an array of struct which caused
modules to not load when any module parameter is specified.
---
include/linux/module.h | 2 +-
kernel/module.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/include/linux/module.h b/include/linux/module.h
index cb41837..5f843dc 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -292,7 +292,7 @@ struct module
unsigned int num_syms;

/* Kernel parameters. */
- struct kernel_param *kp;
+ struct kernel_param **kpp;
unsigned int num_kp;

/* GPL-only exported symbols. */
diff --git a/kernel/module.c b/kernel/module.c
index efa290e..314b39d 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1693,7 +1693,7 @@ static void free_module(struct module *mod)
module_unload_free(mod);

/* Free any allocated parameters. */
- destroy_params(mod->kp, mod->num_kp);
+ destroy_params(*mod->kpp, mod->num_kp);

/* This may be NULL, but that's OK */
unset_section_ro_nx(mod, mod->module_init);
@@ -2429,8 +2429,8 @@ static int check_modinfo(struct module *mod, struct load_info *info)

static void find_module_sections(struct module *mod, struct load_info *info)
{
- mod->kp = section_objs(info, "__param",
- sizeof(*mod->kp), &mod->num_kp);
+ mod->kpp = section_objs(info, "__param",
+ sizeof(void *), &mod->num_kp);
mod->syms = section_objs(info, "__ksymtab",
sizeof(*mod->syms), &mod->num_syms);
mod->crcs = section_addr(info, "__kcrctab");
@@ -2803,12 +2803,12 @@ static struct module *load_module(void __user *umod,
mutex_unlock(&module_mutex);

/* Module is ready to execute: parsing args may do that. */
- err = parse_args(mod->name, mod->args, mod->kp, mod->num_kp, NULL);
+ err = parse_args(mod->name, mod->args, *(mod->kpp), mod->num_kp, NULL);
if (err < 0)
goto unlink;

/* Link in to syfs. */
- err = mod_sysfs_setup(mod, &info, mod->kp, mod->num_kp);
+ err = mod_sysfs_setup(mod, &info, *(mod->kpp), mod->num_kp);
if (err < 0)
goto unlink;

--
1.7.3.4


\
 
 \ /
  Last update: 2011-02-13 17:47    [W:0.041 / U:0.440 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site