From: Rusty Russell Don't want to go overboard with the checks, but this is simple and reasonable. Signed-off-by: Rusty Russell (modified) Signed-off-by: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton --- 25-akpm/kernel/module.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff -puN kernel/module.c~dont-oops-on-stripped-modules kernel/module.c --- 25/kernel/module.c~dont-oops-on-stripped-modules Thu Aug 26 16:18:27 2004 +++ 25-akpm/kernel/module.c Thu Aug 26 16:18:27 2004 @@ -1538,9 +1538,6 @@ static struct module *load_module(void _ secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; sechdrs[0].sh_addr = 0; - /* And these should exist, but gcc whinges if we don't init them */ - symindex = strindex = 0; - for (i = 1; i < hdr->e_shnum; i++) { if (sechdrs[i].sh_type != SHT_NOBITS && len < sechdrs[i].sh_offset + sechdrs[i].sh_size) @@ -1572,6 +1569,13 @@ static struct module *load_module(void _ } mod = (void *)sechdrs[modindex].sh_addr; + if (symindex == 0) { + printk(KERN_WARNING "%s: module has no symbols (stripped?)\n", + mod->name); + err = -ENOEXEC; + goto free_hdr; + } + /* Optional sections */ exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab"); gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl"); _