[binutils-gdb] Stop corruption of ihex output shen addresses are sign extended.

Nick Clifton nickc@sourceware.org
Fri Nov 9 14:10:00 GMT 2018


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

commit d2eb0fb5a04e2e2ad374f56c7107f2421cdd93c9
Author: rhn <sowaac.rhn@porcupinefactory.org>
Date:   Fri Nov 9 14:09:44 2018 +0000

    Stop corruption of ihex output shen addresses are sign extended.
    
    	PR 23699
    	* ihex.c (ihex_write_object_contents): Check for sign extended
    	addresses that cannot be supported in the ihex format.

Diff:
---
 bfd/ChangeLog |  6 ++++++
 bfd/ihex.c    | 18 ++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index cce5968..216271a 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-09  rhn  <sowaac.rhn@porcupinefactory.org>
+
+	PR 23699
+	* ihex.c (ihex_write_object_contents): Check for sign extended
+	addresses that cannot be supported in the ihex format.
+
 2018-11-09  Claudiu Zissulescu  <claziss@synopsys.com>
 
 	* arc-got.h (arc_get_local_got_ents): Revamp it; use
diff --git a/bfd/ihex.c b/bfd/ihex.c
index 80bcbe9..b576ac7 100644
--- a/bfd/ihex.c
+++ b/bfd/ihex.c
@@ -775,8 +775,26 @@ ihex_write_object_contents (bfd *abfd)
       bfd_vma where;
       bfd_byte *p;
       bfd_size_type count;
+      const bfd_vma sign = (bfd_vma) 0xffffffff80000000ULL;
+      const bfd_vma top = (bfd_vma) 0xffffffff00000000ULL;
 
       where = l->where;
+
+      /* Check for unacceptable addresses sign extension.
+	 See PR 23699 for more details.  */
+      if ((where & sign) == top
+	  || ((where & top) != 0 && (where & top) != top))
+       {
+         _bfd_error_handler
+           /* xgettext:c-format */
+           (_("%pB 64-bit address %#" PRIx64 " out of range for Intel Hex file"),
+            abfd, (uint64_t) where);
+         bfd_set_error (bfd_error_bad_value);
+         return FALSE;
+       }
+
+      where &= 0xffffffff;
+
       p = l->data;
       count = l->size;



More information about the Binutils-cvs mailing list