From 536d0ff40ed48b72865992abe1a69c1b3eb46201 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Sat, 10 May 2008 01:58:17 +0000 Subject: [PATCH] * elfcore.h (elf_core_file_p): Warn about core truncation. --- bfd/ChangeLog | 4 ++++ bfd/elfcore.h | 30 ++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0e1ce2cda6..0949d1570a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2008-05-10 Paul Pluzhnikov + + * elfcore.h (elf_core_file_p): Warn about core truncation. + 2008-05-07 Bob Wilson * elf32-xtensa.c (xtensa_property_section_name): New. diff --git a/bfd/elfcore.h b/bfd/elfcore.h index dbf9397572..9c51422624 100644 --- a/bfd/elfcore.h +++ b/bfd/elfcore.h @@ -1,6 +1,6 @@ /* ELF core file support for BFD. - Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007 - Free Software Foundation, Inc. + Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, + 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -227,6 +227,32 @@ elf_core_file_p (bfd *abfd) if (! bfd_section_from_phdr (abfd, i_phdrp + phindex, (int) phindex)) goto fail; + /* Check for core truncation. */ + { + bfd_size_type high = 0; + struct stat statbuf; + for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex) + { + Elf_Internal_Phdr *p = i_phdrp + phindex; + if (p->p_filesz) + { + bfd_size_type current = p->p_offset + p->p_filesz; + if (high < current) + high = current; + } + } + if (bfd_stat (abfd, &statbuf) == 0) + { + if ((bfd_size_type) statbuf.st_size < high) + { + (*_bfd_error_handler) + (_("Warning: %B is truncated: expected core file " + "size >= %lu, found: %lu."), + abfd, (unsigned long) high, (unsigned long) statbuf.st_size); + } + } + } + /* Save the entry point from the ELF header. */ bfd_get_start_address (abfd) = i_ehdrp->e_entry;