diff options
author | Jason Baron <jbaron@redhat.com> | 2010-07-27 13:18:01 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-02 10:20:47 -0700 |
commit | 73213a0735abbfe01e7c5d51a776dd34e14bc8d5 (patch) | |
tree | 5a6bffc1761c316778dc3741f42f9fc3cc5fdffb /kernel | |
parent | f9550546e10e0619fbf54c593a4d9e6adf7efbd0 (diff) |
dynamic debug: move ddebug_remove_module() down into free_module()
commit b82bab4bbe9efa7bc7177fc20620fff19bd95484 upstream.
The command
echo "file ec.c +p" >/sys/kernel/debug/dynamic_debug/control
causes an oops.
Move the call to ddebug_remove_module() down into free_module(). In this
way it should be called from all error paths. Currently, we are missing
the remove if the module init routine fails.
Signed-off-by: Jason Baron <jbaron@redhat.com>
Reported-by: Thomas Renninger <trenn@suse.de>
Tested-by: Thomas Renninger <trenn@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/module.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/module.c b/kernel/module.c index dfa33e8ee2a..4b270e66621 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -870,7 +870,6 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user, mutex_lock(&module_mutex); /* Store the name of the last unloaded module for diagnostic purposes */ strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module)); - ddebug_remove_module(mod->name); free_module(mod); out: @@ -1533,6 +1532,9 @@ static void free_module(struct module *mod) remove_sect_attrs(mod); mod_kobject_remove(mod); + /* Remove dynamic debug info */ + ddebug_remove_module(mod->name); + /* Arch-specific cleanup. */ module_arch_cleanup(mod); |