binutils: CVE-2017-7225

Source: git://sourceware.org/git/binutils-gdb.git
MR: 74296
Type: Security Fix
Disposition: Backport from binutils-2_29-branch
ChangeID: d2cf3ab15c89351c941c92e4cdf28c2bfa9dcda8
Description:

Fix seg-fault running addr2line on a corrupt binary.

    PR binutils/20891
    * aoutx.h (find_nearest_line): Handle the case where the main file
      name and the directory name are both empty.

Affects: <= 2.29

Author: Nick Clifton <nickc@redhat.com>
(From OE-Core rev: ba01ee6899c8d36e6469f6d02d40866fb0502af9)

Signed-off-by: Thiruvadi Rajaraman <trajaraman@mvista.com>
Reviewed-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Thiruvadi Rajaraman
2017-09-04 13:59:36 +05:30
committed by Richard Purdie
parent f85b35f63a
commit 24a6fa6184
2 changed files with 67 additions and 0 deletions

View File

@@ -61,6 +61,7 @@ SRC_URI = "\
file://CVE-2017-12450_12452_12453_12454_12456.patch \
file://CVE-2017-7223.patch \
file://CVE-2017-7224.patch \
file://CVE-2017-7225.patch \
"
S = "${WORKDIR}/git"

View File

@@ -0,0 +1,66 @@
commit 50455f1ab2935f7321215dfa681745c9b1cb5b19
Author: Nick Clifton <nickc@redhat.com>
Date: Thu Dec 1 10:15:07 2016 +0000
Fix seg-fault running addr2line on a corrupt binary.
PR binutils/20891
* aoutx.h (find_nearest_line): Handle the case where the main file
name and the directory name are both empty.
Upstream-Status: backport
CVE: CVE-2017-7225
Signed-off-by: Thiruvadi Rajaraman <trajaraman@mvista.com>
Index: git/bfd/ChangeLog
===================================================================
--- git.orig/bfd/ChangeLog 2017-09-04 13:04:20.941485636 +0530
+++ git/bfd/ChangeLog 2017-09-04 13:08:05.003175703 +0530
@@ -120,6 +120,12 @@
* peicode.h (pe_ILF_object_p): Use strnlen to avoid running over
the end of the string buffer.
+2016-12-01 Nick Clifton <nickc@redhat.com>
+
+ PR binutils/20891
+ * aoutx.h (find_nearest_line): Handle the case where the main file
+ name and the directory name are both empty.
+
PR binutils/20892
* aoutx.h (find_nearest_line): Handle the case where the function
name is empty.
Index: git/bfd/aoutx.h
===================================================================
--- git.orig/bfd/aoutx.h 2017-09-04 13:04:20.941485636 +0530
+++ git/bfd/aoutx.h 2017-09-04 13:10:55.856441243 +0530
@@ -2663,7 +2663,7 @@
char *buf;
*filename_ptr = abfd->filename;
- *functionname_ptr = 0;
+ *functionname_ptr = NULL;
*line_ptr = 0;
if (disriminator_ptr)
*disriminator_ptr = 0;
@@ -2808,9 +2808,17 @@
*filename_ptr = main_file_name;
else
{
- sprintf (buf, "%s%s", directory_name, main_file_name);
- *filename_ptr = buf;
- buf += filelen + 1;
+ if (buf == NULL)
+ /* PR binutils/20891: In a corrupt input file both
+ main_file_name and directory_name can be empty... */
+ * filename_ptr = NULL;
+ else
+ {
+ snprintf (buf, filelen + 1, "%s%s", directory_name,
+ main_file_name);
+ *filename_ptr = buf;
+ buf += filelen + 1;
+ }
}
}