From a9caad024e20635ecebb7be5330747fe23a7292b Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Wed, 10 Sep 2008 17:56:02 +0000 Subject: 2008-09-05 Cary Coutant * fileread.cc (File_read::make_view): Add check for attempt to map beyond end of file. --- gold/ChangeLog | 5 +++++ gold/fileread.cc | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/gold/ChangeLog b/gold/ChangeLog index cac87e6..1df7d74 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,5 +1,10 @@ 2008-09-05 Cary Coutant + * fileread.cc (File_read::make_view): Add check for attempt to map + beyond end of file. + +2008-09-05 Cary Coutant + * symtab.cc (Symbol_table::add_from_dynobj): Fix typos in explicit instantiations. diff --git a/gold/fileread.cc b/gold/fileread.cc index 8c2f8f3..f56e33e 100644 --- a/gold/fileread.cc +++ b/gold/fileread.cc @@ -355,6 +355,14 @@ File_read::make_view(off_t start, section_size_type size, { gold_assert(size > 0); + // Check that start and end of the view are within the file. + if (start > this->size_ || size > this->size_ - start) + gold_fatal(_("%s: attempt to map %lld bytes at offset %lld exceeds " + "size of file; the file may be corrupt"), + this->filename().c_str(), + static_cast(size), + static_cast(start)); + off_t poff = File_read::page_offset(start); section_size_type psize = File_read::pages(size + (start - poff)); -- cgit v1.1