readelf: DO not load section headers from file offset zero

* readelf.c (get_32bit_section_headers): Return false if the
	e_shoff field is zero.
	(get_64bit_section_headers): Likewise.
This commit is contained in:
Nick Clifton 2022-10-03 13:19:21 +01:00
parent 0129298796
commit 907b52f4ce
2 changed files with 19 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2022-10-03 Nick Clifton <nickc@redhat.com>
* readelf.c (get_32bit_section_headers): Return false if the
e_shoff field is zero.
(get_64bit_section_headers): Likewise.
2022-09-28 Nick Clifton <nickc@redhat.com>
PR 29628

View File

@ -6365,6 +6365,13 @@ get_32bit_section_headers (Filedata * filedata, bool probe)
/* PR binutils/17531: Cope with unexpected section header sizes. */
if (size == 0 || num == 0)
return false;
/* The section header cannot be at the start of the file - that is
where the ELF file header is located. A file with absolutely no
sections in it will use a shoff of 0. */
if (filedata->file_header.e_shoff == 0)
return false;
if (size < sizeof * shdrs)
{
if (! probe)
@ -6429,6 +6436,12 @@ get_64bit_section_headers (Filedata * filedata, bool probe)
if (size == 0 || num == 0)
return false;
/* The section header cannot be at the start of the file - that is
where the ELF file header is located. A file with absolutely no
sections in it will use a shoff of 0. */
if (filedata->file_header.e_shoff == 0)
return false;
if (size < sizeof * shdrs)
{
if (! probe)