diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/module.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/kernel/module.c b/kernel/module.c index 1a9a3986b136..f6e08b7cff7c 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -1673,8 +1673,7 @@ static void layout_sections(struct module *mod, | |||
1673 | if ((s->sh_flags & masks[m][0]) != masks[m][0] | 1673 | if ((s->sh_flags & masks[m][0]) != masks[m][0] |
1674 | || (s->sh_flags & masks[m][1]) | 1674 | || (s->sh_flags & masks[m][1]) |
1675 | || s->sh_entsize != ~0UL | 1675 | || s->sh_entsize != ~0UL |
1676 | || strncmp(secstrings + s->sh_name, | 1676 | || strstarts(secstrings + s->sh_name, ".init")) |
1677 | ".init", 5) == 0) | ||
1678 | continue; | 1677 | continue; |
1679 | s->sh_entsize = get_offset(mod, &mod->core_size, s, i); | 1678 | s->sh_entsize = get_offset(mod, &mod->core_size, s, i); |
1680 | DEBUGP("\t%s\n", secstrings + s->sh_name); | 1679 | DEBUGP("\t%s\n", secstrings + s->sh_name); |
@@ -1691,8 +1690,7 @@ static void layout_sections(struct module *mod, | |||
1691 | if ((s->sh_flags & masks[m][0]) != masks[m][0] | 1690 | if ((s->sh_flags & masks[m][0]) != masks[m][0] |
1692 | || (s->sh_flags & masks[m][1]) | 1691 | || (s->sh_flags & masks[m][1]) |
1693 | || s->sh_entsize != ~0UL | 1692 | || s->sh_entsize != ~0UL |
1694 | || strncmp(secstrings + s->sh_name, | 1693 | || !strstarts(secstrings + s->sh_name, ".init")) |
1695 | ".init", 5) != 0) | ||
1696 | continue; | 1694 | continue; |
1697 | s->sh_entsize = (get_offset(mod, &mod->init_size, s, i) | 1695 | s->sh_entsize = (get_offset(mod, &mod->init_size, s, i) |
1698 | | INIT_OFFSET_MASK); | 1696 | | INIT_OFFSET_MASK); |
@@ -1825,8 +1823,7 @@ static char elf_type(const Elf_Sym *sym, | |||
1825 | else | 1823 | else |
1826 | return 'b'; | 1824 | return 'b'; |
1827 | } | 1825 | } |
1828 | if (strncmp(secstrings + sechdrs[sym->st_shndx].sh_name, | 1826 | if (strstarts(secstrings + sechdrs[sym->st_shndx].sh_name, ".debug")) |
1829 | ".debug", strlen(".debug")) == 0) | ||
1830 | return 'n'; | 1827 | return 'n'; |
1831 | return '?'; | 1828 | return '?'; |
1832 | } | 1829 | } |
@@ -1952,7 +1949,7 @@ static noinline struct module *load_module(void __user *umod, | |||
1952 | } | 1949 | } |
1953 | #ifndef CONFIG_MODULE_UNLOAD | 1950 | #ifndef CONFIG_MODULE_UNLOAD |
1954 | /* Don't load .exit sections */ | 1951 | /* Don't load .exit sections */ |
1955 | if (strncmp(secstrings+sechdrs[i].sh_name, ".exit", 5) == 0) | 1952 | if (strstarts(secstrings+sechdrs[i].sh_name, ".exit")) |
1956 | sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC; | 1953 | sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC; |
1957 | #endif | 1954 | #endif |
1958 | /* Don't keep __versions around; it's just for loading. */ | 1955 | /* Don't keep __versions around; it's just for loading. */ |