| From b82bab4bbe9efa7bc7177fc20620fff19bd95484 Mon Sep 17 00:00:00 2001 |
| From: Jason Baron <jbaron@redhat.com> |
| Date: Tue, 27 Jul 2010 13:18:01 -0700 |
| Subject: dynamic debug: move ddebug_remove_module() down into free_module() |
| |
| From: Jason Baron <jbaron@redhat.com> |
| |
| 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> |
| |
| --- |
| kernel/module.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/kernel/module.c |
| +++ b/kernel/module.c |
| @@ -720,7 +720,6 @@ SYSCALL_DEFINE2(delete_module, const cha |
| 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: |
| @@ -1383,6 +1382,9 @@ static void free_module(struct module *m |
| remove_sect_attrs(mod); |
| mod_kobject_remove(mod); |
| |
| + /* Remove dynamic debug info */ |
| + ddebug_remove_module(mod->name); |
| + |
| /* Arch-specific cleanup. */ |
| module_arch_cleanup(mod); |
| |