[prev in list] [next in list] [prev in thread] [next in thread] 

List:       binutils
Subject:    PR25046, readelf "Reading xxx bytes extends past end of file for dynamic section"
From:       Alan Modra <amodra () gmail ! com>
Date:       2019-09-30 4:51:49
Message-ID: 20190930045134.GB20197 () bubble ! grove ! modra ! org
[Download RAW message or body]

process_object does
  if (process_program_headers (filedata))
    process_dynamic_section (filedata);
but process_program_headers can return true before clearing globals
used by process_dynamic_section, leaving stale data from a previous
file.

	PR 25046
	* readelf.c (process_program_headers): Clear dynamic_addr and
	dynamic_size earlier.

diff --git a/binutils/readelf.c b/binutils/readelf.c
index cc168163b2..0962877ad8 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -5101,6 +5101,9 @@ process_program_headers (Filedata * filedata)
   unsigned int i;
   Elf_Internal_Phdr * previous_load = NULL;
 
+  dynamic_addr = 0;
+  dynamic_size = 0;
+
   if (filedata->file_header.e_phnum == 0)
     {
       /* PR binutils/12467.  */
@@ -5151,9 +5154,6 @@ process_program_headers (Filedata * filedata)
 	}
     }
 
-  dynamic_addr = 0;
-  dynamic_size = 0;
-
   for (i = 0, segment = filedata->program_headers;
        i < filedata->file_header.e_phnum;
        i++, segment++)

-- 
Alan Modra
Australia Development Lab, IBM
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic