]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
kbuild: fix segfault in modpost
authorPetr Stetiar <ynezz@true.cz>
Mon, 27 Aug 2007 10:15:07 +0000 (12:15 +0200)
committerSam Ravnborg <sam@neptun.(none)>
Fri, 12 Oct 2007 19:15:30 +0000 (21:15 +0200)
Fix modpost segfault.

Before:
-------
ynezz@ntbk:~/linux-2.6.git$ scripts/mod/modpost vmlinux ath_pci.o
Segmentation fault

After:
------
ynezz@ntbk:~/linux-2.6.git$ scripts/mod/modpost vmlinux ath_pci.o
FATAL: section header offset=815726848 in file 'ath_pci.o' is bigger then filesize=153968

Sam: This seems to warn for a binutils issue. Anyway modpost should not
segfault.

Signed-off-by: Petr Stetiar <ynezz@true.cz>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
scripts/mod/modpost.c

index 0a4051fbd34e24116cd55c4e758605ea683348a8..2ef9a193fcaef33cc527dab5ace20dd492ba4af1 100644 (file)
@@ -381,6 +381,12 @@ static int parse_elf(struct elf_info *info, const char *filename)
        sechdrs = (void *)hdr + hdr->e_shoff;
        info->sechdrs = sechdrs;
 
+       /* Check if file offset is correct */
+       if (hdr->e_shoff > info->size) {
+               fatal("section header offset=%u in file '%s' is bigger then filesize=%lu\n", hdr->e_shoff, filename, info->size);
+               return 0;
+       }
+
        /* Fix endianness in section headers */
        for (i = 0; i < hdr->e_shnum; i++) {
                sechdrs[i].sh_type   = TO_NATIVE(sechdrs[i].sh_type);