[binutils-gdb] readelf: nds32 specific decoding

Alan Modra amodra@sourceware.org
Mon May 4 01:59:03 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9c7b8e9b92696f38ff29efeeb12eb166994c0a23

commit 9c7b8e9b92696f38ff29efeeb12eb166994c0a23
Author: Alan Modra <amodra@gmail.com>
Date:   Mon May 4 10:20:54 2020 +0930

    readelf: nds32 specific decoding
    
            * readelf.c (process_nds32_specific): Check size of .nds32_e_flags
            section.  Don't assume endian of host matches nds32 target.  Free
            buffer.

Diff:
---
 binutils/ChangeLog |  6 ++++++
 binutils/readelf.c | 15 +++++++++------
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 52082fcae12..7b0d1a0477e 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,9 @@
+2020-05-04  Alan Modra  <amodra@gmail.com>
+
+	* readelf.c (process_nds32_specific): Check size of .nds32_e_flags
+	section.  Don't assume endian of host matches nds32 target.  Free
+	buffer.
+
 2020-05-01  Alan Modra  <amodra@gmail.com>
 	    Haim Shimonovich  <Haim.Shimonovich@ceva-dsp.com>
 
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 4ceb6b2151f..25c2cce21ae 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -17481,18 +17481,21 @@ process_nds32_specific (Filedata * filedata)
   Elf_Internal_Shdr *sect = NULL;
 
   sect = find_section (filedata, ".nds32_e_flags");
-  if (sect != NULL)
+  if (sect != NULL && sect->sh_size >= 4)
     {
-      unsigned int *flag;
+      unsigned char *buf;
+      unsigned int flag;
 
       printf ("\nNDS32 elf flags section:\n");
-      flag = get_data (NULL, filedata, sect->sh_offset, 1,
-		       sect->sh_size, _("NDS32 elf flags section"));
+      buf = get_data (NULL, filedata, sect->sh_offset, 1, 4,
+		      _("NDS32 elf flags section"));
 
-      if (! flag)
+      if (buf == NULL)
 	return FALSE;
 
-      switch ((*flag) & 0x3)
+      flag = byte_get (buf, 4);
+      free (buf);
+      switch (flag & 0x3)
 	{
 	case 0:
 	  printf ("(VEC_SIZE):\tNo entry.\n");


More information about the Binutils-cvs mailing list