This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [committed, PATCH] Check file size before getting section contents
- From: Pedro Alves <palves at redhat dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>, binutils at sourceware dot org
- Cc: Nick Clifton <nickc at redhat dot com>
- Date: Mon, 26 Jun 2017 22:48:42 +0100
- Subject: Re: [committed, PATCH] Check file size before getting section contents
- Authentication-results: sourceware.org; auth=none
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com
- Authentication-results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=palves at redhat dot com
- Dkim-filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 918C880477
- Dmarc-filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 918C880477
- References: <20170626163140.GA16718@gmail.com>
Hi H.J.,
This patch caused many regressions in GDB's testsuite:
https://sourceware.org/ml/gdb-testers/2017-q2/msg05045.html
x86 buildslaves haven't caught up with the patch yet, but I
see the same thing locally, on my x86-64 machine. (git bisect
pointed me here.)
Here's quick way to run only a few of the tests that are now failing:
$ make check TESTS="gdb.base/break-interp.exp gdb.base/corefile.exp gdb.base/solib-search.exp gdb.reverse/sigall-precsave.exp"
Any idea what's going on?
BTW, this looks very suspicious:
@@ -867,7 +876,13 @@ _bfd_generic_get_section_contents_in_window
sz = section->rawsize;
else
sz = section->size;
+ filesz = bfd_get_file_size (abfd);
+ {
+ /* This should never happen. */
+ abort ();
+ }
... because that abort is unconditional. Did you intend
to guard it with:
if (filesz < 0)
like in _bfd_generic_get_section_contents?
Thanks,
Pedro Alves
On 06/26/2017 05:31 PM, H.J. Lu wrote:
> Don't check the section size in bfd_get_full_section_contents since
> the size of a decompressed section may be larger than the file size.
> Instead, check file size in _bfd_generic_get_section_contents.
>
> PR binutils/21665
> * compress.c (bfd_get_full_section_contents): Don't check the
> file size here.
> * libbfd.c (_bfd_generic_get_section_contents): Check for and
> reject a section whoes size + offset is greater than the size
> of the entire file.
> (_bfd_generic_get_section_contents_in_window): Likewise.