dynamic debug: move ddebug_remove_module() down into free_module()
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> Cc: <stable@kernel.org> [2.6.32+] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
d15aa2cc64
Коммит
b82bab4bbe
|
@ -787,7 +787,6 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
|
||||||
|
|
||||||
/* Store the name of the last unloaded module for diagnostic purposes */
|
/* Store the name of the last unloaded module for diagnostic purposes */
|
||||||
strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
|
strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
|
||||||
ddebug_remove_module(mod->name);
|
|
||||||
|
|
||||||
free_module(mod);
|
free_module(mod);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1550,6 +1549,9 @@ static void free_module(struct module *mod)
|
||||||
remove_sect_attrs(mod);
|
remove_sect_attrs(mod);
|
||||||
mod_kobject_remove(mod);
|
mod_kobject_remove(mod);
|
||||||
|
|
||||||
|
/* Remove dynamic debug info */
|
||||||
|
ddebug_remove_module(mod->name);
|
||||||
|
|
||||||
/* Arch-specific cleanup. */
|
/* Arch-specific cleanup. */
|
||||||
module_arch_cleanup(mod);
|
module_arch_cleanup(mod);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче