diff options
author | Petr Stetiar <ynezz@true.cz> | 2007-08-27 06:15:07 -0400 |
---|---|---|
committer | Sam Ravnborg <sam@neptun.(none)> | 2007-10-12 15:15:30 -0400 |
commit | a83710e584b8ef46fc44472ec6f0c342003416e8 (patch) | |
tree | 621cd4139b63f7a20efc5f29db54a34cfe0f64ea | |
parent | 88f567f3a3c1901a40150b43fda87adad1b3e807 (diff) |
kbuild: fix segfault in modpost
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>
-rw-r--r-- | scripts/mod/modpost.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 0a4051fbd34e..2ef9a193fcae 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c | |||
@@ -381,6 +381,12 @@ static int parse_elf(struct elf_info *info, const char *filename) | |||
381 | sechdrs = (void *)hdr + hdr->e_shoff; | 381 | sechdrs = (void *)hdr + hdr->e_shoff; |
382 | info->sechdrs = sechdrs; | 382 | info->sechdrs = sechdrs; |
383 | 383 | ||
384 | /* Check if file offset is correct */ | ||
385 | if (hdr->e_shoff > info->size) { | ||
386 | fatal("section header offset=%u in file '%s' is bigger then filesize=%lu\n", hdr->e_shoff, filename, info->size); | ||
387 | return 0; | ||
388 | } | ||
389 | |||
384 | /* Fix endianness in section headers */ | 390 | /* Fix endianness in section headers */ |
385 | for (i = 0; i < hdr->e_shnum; i++) { | 391 | for (i = 0; i < hdr->e_shnum; i++) { |
386 | sechdrs[i].sh_type = TO_NATIVE(sechdrs[i].sh_type); | 392 | sechdrs[i].sh_type = TO_NATIVE(sechdrs[i].sh_type); |