diff options
author | rhn <sowaac.rhn@porcupinefactory.org> | 2018-11-09 14:09:44 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2018-11-09 14:09:44 +0000 |
commit | d2eb0fb5a04e2e2ad374f56c7107f2421cdd93c9 (patch) | |
tree | ccecd4eda66e1e3458c3cf14248f1e4a48e7531b | |
parent | dcd9adc5cbac756507eb5da65a4f9cf3edb8fc93 (diff) | |
download | gdb-d2eb0fb5a04e2e2ad374f56c7107f2421cdd93c9.zip gdb-d2eb0fb5a04e2e2ad374f56c7107f2421cdd93c9.tar.gz gdb-d2eb0fb5a04e2e2ad374f56c7107f2421cdd93c9.tar.bz2 |
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.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/ihex.c | 18 |
2 files changed, 24 insertions, 0 deletions
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 @@ -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; |