Messages in this thread Patch in this message | | | From | Rusty Russell <> | Subject | Re: [PATCH] fix error handling in load_module() | Date | Tue, 22 Sep 2009 14:35:21 +0930 |
| |
On Tue, 22 Sep 2009 12:11:21 am Tejun Heo wrote: > Hello, Andrew. > > Andrew Morton wrote: > > My reverse engineering of the secret, undocumented percpu_modfree() > > indicates that its mad inventor intended that percpu_modfree(NULL) be a > > valid thing to do. > > > > It calls free_percpu(), all implementations of which appear to secretly > > support free_percpu(NULL). > > Eh... unfortunately, the original percpu_modfree() implementation > didn't seem to support it.
OK, I'll Andrew's fix for Tejun, and after his (spot-on!) comment about percpu_modfree never taking NULL, I've fixed the one caller to match the other two:
Subject: module: don't call percpu_modfree on NULL pointer.
The general one handles NULL, the static obsolescent (CONFIG_HAVE_LEGACY_PER_CPU_AREA) one in module.c doesn't; Eric's commit 720eba31 assumed it did, and various frobbings since then kept that assumption.
All other callers in module.c all protect it with an if; this effectively does the same as free_init is only goto if we fail percpu_modalloc().
Reported-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Cc: Eric Dumazet <dada1@cosmosbay.com> Cc: Masami Hiramatsu <mhiramat@redhat.com> Cc: Américo Wang <xiyou.wangcong@gmail.com>
diff --git a/kernel/module.c b/kernel/module.c --- a/kernel/module.c +++ b/kernel/module.c @@ -2522,8 +2522,8 @@ static noinline struct module *load_modu free_unload: module_unload_free(mod); #if defined(CONFIG_MODULE_UNLOAD) && defined(CONFIG_SMP) + percpu_modfree(mod->refptr); free_init: - percpu_modfree(mod->refptr); #endif module_free(mod, mod->module_init); free_core: -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |