aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/module.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/module.c b/kernel/module.c
index 39827c3d9484..c54f10d90e1c 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -1797,6 +1797,17 @@ static void setup_modinfo(struct module *mod, Elf_Shdr *sechdrs,
1797 } 1797 }
1798} 1798}
1799 1799
1800static void free_modinfo(struct module *mod)
1801{
1802 struct module_attribute *attr;
1803 int i;
1804
1805 for (i = 0; (attr = modinfo_attrs[i]); i++) {
1806 if (attr->free)
1807 attr->free(mod);
1808 }
1809}
1810
1800#ifdef CONFIG_KALLSYMS 1811#ifdef CONFIG_KALLSYMS
1801 1812
1802/* lookup symbol in given range of kernel_symbols */ 1813/* lookup symbol in given range of kernel_symbols */
@@ -2506,6 +2517,7 @@ static noinline struct module *load_module(void __user *umod,
2506 synchronize_sched(); 2517 synchronize_sched();
2507 module_arch_cleanup(mod); 2518 module_arch_cleanup(mod);
2508 cleanup: 2519 cleanup:
2520 free_modinfo(mod);
2509 kobject_del(&mod->mkobj.kobj); 2521 kobject_del(&mod->mkobj.kobj);
2510 kobject_put(&mod->mkobj.kobj); 2522 kobject_put(&mod->mkobj.kobj);
2511 free_unload: 2523 free_unload: