Skip to content

Commit

Permalink
module: fix memory leak when load fails after srcversion/version allo…
Browse files Browse the repository at this point in the history
…cated

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>
  • Loading branch information
Rusty Russell committed Sep 24, 2009
1 parent 1d7015c commit a263f77
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions kernel/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit a263f77

Please sign in to comment.