mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
module: fix memory leak when load fails after srcversion/version allocated
Normally the twisty paths of sysfs will free the attributes, but not if we fail before we hook it into sysfs (which is the last thing we do in load_module). (This sysfs code is a turd, no doubt there are other issues lurking too). Reported-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Cc: Catalin Marinas <catalin.marinas@arm.com> Tested-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
This commit is contained in:
parent
1d7015caa0
commit
a263f7763c
1 changed files with 12 additions and 0 deletions
|
@ -1797,6 +1797,17 @@ static void setup_modinfo(struct module *mod, Elf_Shdr *sechdrs,
|
|||
}
|
||||
}
|
||||
|
||||
static void free_modinfo(struct module *mod)
|
||||
{
|
||||
struct module_attribute *attr;
|
||||
int i;
|
||||
|
||||
for (i = 0; (attr = modinfo_attrs[i]); i++) {
|
||||
if (attr->free)
|
||||
attr->free(mod);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_KALLSYMS
|
||||
|
||||
/* lookup symbol in given range of kernel_symbols */
|
||||
|
@ -2506,6 +2517,7 @@ static noinline struct module *load_module(void __user *umod,
|
|||
synchronize_sched();
|
||||
module_arch_cleanup(mod);
|
||||
cleanup:
|
||||
free_modinfo(mod);
|
||||
kobject_del(&mod->mkobj.kobj);
|
||||
kobject_put(&mod->mkobj.kobj);
|
||||
free_unload:
|
||||
|
|
Loading…
Reference in a new issue