mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:49:54 +08:00
Re: readelf section reading
Fix commit 4de91c10cdd9, which cached the single section header read to pick up file header extension fields. Also, testing e_shoff in get_section_headers opened a hole for fuzzers where we'd end up with segfaults due to non-zero e_shnum but NULL section_headers. * readelf.c (get_section_headers): Don't test e_shoff here, leave that to get_32bit_section_headers or get_64bit_section_headers. (process_object): Throw away section header read to print file header extension.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2021-06-12 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* readelf.c (get_section_headers): Don't test e_shoff here, leave
|
||||||
|
that to get_32bit_section_headers or get_64bit_section_headers.
|
||||||
|
(process_object): Throw away section header read to print file
|
||||||
|
header extension.
|
||||||
|
|
||||||
2021-06-11 Alan Modra <amodra@gmail.com>
|
2021-06-11 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* readelf.c (struct filedata): Move archive_file_offset and
|
* readelf.c (struct filedata): Move archive_file_offset and
|
||||||
|
@ -5859,9 +5859,6 @@ get_section_headers (Filedata *filedata, bool probe)
|
|||||||
if (filedata->section_headers != NULL)
|
if (filedata->section_headers != NULL)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (filedata->file_header.e_shoff == 0)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (is_32bit_elf)
|
if (is_32bit_elf)
|
||||||
return get_32bit_section_headers (filedata, probe);
|
return get_32bit_section_headers (filedata, probe);
|
||||||
else
|
else
|
||||||
@ -21361,6 +21358,11 @@ process_object (Filedata * filedata)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Throw away the single section header read above, so that we
|
||||||
|
re-read the entire set. */
|
||||||
|
free (filedata->section_headers);
|
||||||
|
filedata->section_headers = NULL;
|
||||||
|
|
||||||
if (! process_section_headers (filedata))
|
if (! process_section_headers (filedata))
|
||||||
{
|
{
|
||||||
/* Without loaded section headers we cannot process lots of things. */
|
/* Without loaded section headers we cannot process lots of things. */
|
||||||
|
Reference in New Issue
Block a user