about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-05-20 04:34:34 -0700
committerbors <bors@rust-lang.org>2016-05-20 04:34:34 -0700
commit55cabda8d5bc023991aff7f53230a11a539dad80 (patch)
tree58ce0cc0097a307209b185d1144b443065b81a5d /src
parentd27bdafc3eaab2729d664f82b7d650782640f31a (diff)
parenta42115375b1d7ae2a6c3f8c85819ef8182abaf52 (diff)
Auto merge of #33729 - alexcrichton:patch-libbacktrace, r=sfackler
std: Backport a libbacktrace soundness fix

This is a backport of gcc-mirror/gcc@047a1c2f which is a soundness fix for when
a backtrace is generated on executables that do not have debug information.
Diffstat (limited to 'src')
-rw-r--r--src/libbacktrace/ChangeLog22
-rw-r--r--src/libbacktrace/elf.c6
-rw-r--r--src/libbacktrace/mmap.c4
-rw-r--r--src/libbacktrace/pecoff.c3
4 files changed, 31 insertions, 4 deletions
diff --git a/src/libbacktrace/ChangeLog b/src/libbacktrace/ChangeLog
index 2afa4705539..acc07047f67 100644
--- a/src/libbacktrace/ChangeLog
+++ b/src/libbacktrace/ChangeLog
@@ -1,15 +1,33 @@
+2016-05-18  Uros Bizjak  <ubizjak@gmail.com>
+
+	PR target/71161
+	* elf.c (phdr_callback) [__i386__]: Add
+	__attribute__((__force_align_arg_pointer__)).
+
+2016-03-02  Maxim Ostapenko  <m.ostapenko@partner.samsung.com>
+
+	* elf.c (backtrace_initialize): Properly initialize elf_fileline_fn to
+	avoid possible crash.
+	(elf_add): Don't set *fileline_fn to elf_nodebug value in case of
+	missing debug info anymore.
+
+2016-02-06  John David Anglin  <danglin@gcc.gnu.org>
+
+	* mmap.c (MAP_FAILED): Define if not defined.
+
 2016-01-04  Jakub Jelinek  <jakub@redhat.com>
 
 	Update copyright years.
 
 2015-12-18  Andris Pavenis  <andris.pavenis@iki.fi>
 
-	* configure.ac: Specify that DJGPP do not have mmap even when sys/mman.h exists
+	* configure.ac: Specify that DJGPP do not have mmap
+	even when sys/mman.h exists.
 	* configure: Regenerate
 
 2015-12-09  John David Anglin  <danglin@gcc.gnu.org>
 
-	PR 68115/libfortran
+	PR libgfortran/68115
 	* configure.ac: Set libbacktrace_cv_sys_sync to no on hppa*-*-hpux*.
 	* configure: Regenerate.
 	* elf.c (backtrace_initialize): Cast __sync_bool_compare_and_swap call
diff --git a/src/libbacktrace/elf.c b/src/libbacktrace/elf.c
index 05cc5c04734..81ba3440ab7 100644
--- a/src/libbacktrace/elf.c
+++ b/src/libbacktrace/elf.c
@@ -791,7 +791,6 @@ elf_add (struct backtrace_state *state, int descriptor, uintptr_t base_address,
     {
       if (!backtrace_close (descriptor, error_callback, data))
 	goto fail;
-      *fileline_fn = elf_nodebug;
       return 1;
     }
 
@@ -867,6 +866,9 @@ struct phdr_data
    libraries.  */
 
 static int
+#ifdef __i386__
+__attribute__ ((__force_align_arg_pointer__))
+#endif
 phdr_callback (struct dl_phdr_info *info, size_t size ATTRIBUTE_UNUSED,
 	       void *pdata)
 {
@@ -925,7 +927,7 @@ backtrace_initialize (struct backtrace_state *state, int descriptor,
   int ret;
   int found_sym;
   int found_dwarf;
-  fileline elf_fileline_fn;
+  fileline elf_fileline_fn = elf_nodebug;
   struct phdr_data pd;
 
   ret = elf_add (state, descriptor, 0, error_callback, data, &elf_fileline_fn,
diff --git a/src/libbacktrace/mmap.c b/src/libbacktrace/mmap.c
index 0ed4802d02d..138ef70711a 100644
--- a/src/libbacktrace/mmap.c
+++ b/src/libbacktrace/mmap.c
@@ -50,6 +50,10 @@ POSSIBILITY OF SUCH DAMAGE.  */
 #define MAP_ANONYMOUS MAP_ANON
 #endif
 
+#ifndef MAP_FAILED
+#define MAP_FAILED ((void *)-1)
+#endif
+
 /* A list of free memory blocks.  */
 
 struct backtrace_freelist_struct
diff --git a/src/libbacktrace/pecoff.c b/src/libbacktrace/pecoff.c
index 31126cf4741..04e0bafb149 100644
--- a/src/libbacktrace/pecoff.c
+++ b/src/libbacktrace/pecoff.c
@@ -602,6 +602,9 @@ coff_add (struct backtrace_state *state, int descriptor,
   const b_coff_section_header *sects;
   struct backtrace_view str_view;
   int str_view_valid;
+  // NOTE: upstream this is a `size_t` but this was fixed in Rust commit
+  //       55e2b7e1b, see #33729 for more info. If you see this in a diff
+  //       against the upstream libbacktrace, that's what's going on.
   uint32_t str_size;
   off_t str_off;
   struct backtrace_view syms_view;