summaryrefslogtreecommitdiff
path: root/debian/patches/pr21137.diff
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2019-11-17 13:34:36 +0300
committerIgor Pashev <pashev.igor@gmail.com>2019-11-17 13:34:36 +0300
commit6cf4e270d951dccb5cabe70d865415d2628c7a4e (patch)
tree119cbca714d74244d1aa4e2241e59fbf8450d30d /debian/patches/pr21137.diff
parentf0ef3d0a5cb2410eab2b1b412e7ec7ef94fa0dc6 (diff)
downloadbinutils-6cf4e270d951dccb5cabe70d865415d2628c7a4e.tar.gz
Import 2.33.1-2debian/2.33.1-2debian
Diffstat (limited to 'debian/patches/pr21137.diff')
-rw-r--r--debian/patches/pr21137.diff112
1 files changed, 0 insertions, 112 deletions
diff --git a/debian/patches/pr21137.diff b/debian/patches/pr21137.diff
deleted file mode 100644
index b60ffb3..0000000
--- a/debian/patches/pr21137.diff
+++ /dev/null
@@ -1,112 +0,0 @@
-# DP: Fix PR binutils/21137, readelf writing to illegal addresses.
-
-From 03f7786e2f440b9892b1c34a58fb26222ce1b493 Mon Sep 17 00:00:00 2001
-From: Nick Clifton <nickc@redhat.com>
-Date: Mon, 13 Feb 2017 13:08:32 +0000
-Subject: [PATCH] Fix readelf writing to illegal addresses whilst processing
- corrupt input files containing symbol-difference relocations.
-
- PR binutils/21137
- * readelf.c (target_specific_reloc_handling): Add end parameter.
- Check for buffer overflow before writing relocated values.
- (apply_relocations): Pass end to target_specific_reloc_handling.
----
- binutils/ChangeLog | 7 +++++++
- binutils/readelf.c | 30 +++++++++++++++++++++++++-----
- 2 files changed, 32 insertions(+), 5 deletions(-)
-
-2017-02-13 Nick Clifton <nickc@redhat.com>
-
- PR binutils/21137
- * readelf.c (target_specific_reloc_handling): Add end parameter.
- Check for buffer overflow before writing relocated values.
- (apply_relocations): Pass end to target_specific_reloc_handling.
-
-diff --git a/binutils/readelf.c b/binutils/readelf.c
-index b488714..e474f27 100644
---- a/binutils/readelf.c
-+++ b/binutils/readelf.c
-@@ -11591,6 +11591,7 @@ process_syminfo (FILE * file ATTRIBUTE_UNUSED)
- static bfd_boolean
- target_specific_reloc_handling (Elf_Internal_Rela * reloc,
- unsigned char * start,
-+ unsigned char * end,
- Elf_Internal_Sym * symtab)
- {
- unsigned int reloc_type = get_reloc_type (reloc->r_info);
-@@ -11631,13 +11632,19 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
- handle_sym_diff:
- if (saved_sym != NULL)
- {
-+ int reloc_size = reloc_type == 1 ? 4 : 2;
- bfd_vma value;
-
- value = reloc->r_addend
- + (symtab[get_reloc_symindex (reloc->r_info)].st_value
- - saved_sym->st_value);
-
-- byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2);
-+ if (start + reloc->r_offset + reloc_size >= end)
-+ /* PR 21137 */
-+ error (_("MSP430 sym diff reloc writes past end of section (%p vs %p)\n"),
-+ start + reloc->r_offset + reloc_size, end);
-+ else
-+ byte_put (start + reloc->r_offset, value, reloc_size);
-
- saved_sym = NULL;
- return TRUE;
-@@ -11668,13 +11675,18 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
- case 2: /* R_MN10300_16 */
- if (saved_sym != NULL)
- {
-+ int reloc_size = reloc_type == 1 ? 4 : 2;
- bfd_vma value;
-
- value = reloc->r_addend
- + (symtab[get_reloc_symindex (reloc->r_info)].st_value
- - saved_sym->st_value);
-
-- byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2);
-+ if (start + reloc->r_offset + reloc_size >= end)
-+ error (_("MN10300 sym diff reloc writes past end of section (%p vs %p)\n"),
-+ start + reloc->r_offset + reloc_size, end);
-+ else
-+ byte_put (start + reloc->r_offset, value, reloc_size);
-
- saved_sym = NULL;
- return TRUE;
-@@ -11709,12 +11721,20 @@ target_specific_reloc_handling (Elf_Internal_Rela * reloc,
- break;
-
- case 0x41: /* R_RL78_ABS32. */
-- byte_put (start + reloc->r_offset, value, 4);
-+ if (start + reloc->r_offset + 4 >= end)
-+ error (_("RL78 sym diff reloc writes past end of section (%p vs %p)\n"),
-+ start + reloc->r_offset + 2, end);
-+ else
-+ byte_put (start + reloc->r_offset, value, 4);
- value = 0;
- return TRUE;
-
- case 0x43: /* R_RL78_ABS16. */
-- byte_put (start + reloc->r_offset, value, 2);
-+ if (start + reloc->r_offset + 2 >= end)
-+ error (_("RL78 sym diff reloc writes past end of section (%p vs %p)\n"),
-+ start + reloc->r_offset + 2, end);
-+ else
-+ byte_put (start + reloc->r_offset, value, 2);
- value = 0;
- return TRUE;
-
-@@ -12340,7 +12360,7 @@ apply_relocations (void * file,
-
- reloc_type = get_reloc_type (rp->r_info);
-
-- if (target_specific_reloc_handling (rp, start, symtab))
-+ if (target_specific_reloc_handling (rp, start, end, symtab))
- continue;
- else if (is_none_reloc (reloc_type))
- continue;
---
-2.9.3
-