Re: CVE-2016-6131 binutils, gdb, valgrind etc.
I have CCed the package maintainer, the two people in the Uploaders
header, and the person who made the last security update of binutils.
I have a LTS update of binutils for wheezy, that fixes most of the
pending minor security issues. All except CVE-2016-4491 to be
precise. Attached is a copy of the patch from the current version, below
is a URL to a version available for testing.
https://people.debian.org/~bam/debian/pool/main/b/binutils/
I have not found any regressions in my testing of this package.
If there are no objections I plan to upload this next Monday (18th).
--
Brian May <bam@debian.org>
diff -u binutils-2.22/debian/changelog binutils-2.22/debian/changelog
--- binutils-2.22/debian/changelog
+++ binutils-2.22/debian/changelog
@@ -1,3 +1,20 @@
+binutils (2.22-8+deb7u3) wheezy-security; urgency=high
+
+ * Non-maintainer upload by the LTS Team.
+ * Fixes for the following CVEs:
+ * CVE-2016-2226.patch: Exploitable buffer overflow
+ * CVE-2016-4487.patch: Invalid write due to a use-after-free to array btypevec
+ * CVE-2016-4488.patch: Invalid write due to a use-after-free to array ktypevec
+ * CVE-2016-4489.patch: Invalid write due to integer overflow
+ * CVE-2016-4490-1.patch: Write access violation
+ * CVE-2016-4490-2.patch: Write access violation
+ * CVE-2016-4492_CVE-2016-4493.patch: Read/write access violations
+ * CVE-2016-6131.patch: Libiberty Demangler segfaults
+ * CVE-2016-XXXX.patch: Stack buffer overflow when printing bad bytes in
+ Intel Hex objects
+
+ -- Brian May <bam@debian.org> Tue, 05 Jul 2016 18:18:56 +1000
+
binutils (2.22-8+deb7u2) wheezy-security; urgency=high
* FTBFS on armel, kfreebsd-i386, mips, mipsel, powerpc, and s390 fixed.
diff -u binutils-2.22/debian/patches/series binutils-2.22/debian/patches/series
--- binutils-2.22/debian/patches/series
+++ binutils-2.22/debian/patches/series
@@ -43,0 +44,10 @@
+
+CVE-2016-2226.patch
+CVE-2016-4487.patch
+CVE-2016-4488.patch
+CVE-2016-4489.patch
+CVE-2016-4490-1.patch
+CVE-2016-4490-2.patch
+CVE-2016-4492_CVE-2016-4493.patch
+CVE-2016-6131.patch
+CVE-2016-XXXX.patch
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-2226.patch
+++ binutils-2.22/debian/patches/CVE-2016-2226.patch
@@ -0,0 +1,52 @@
+--- a/libiberty/cplus-dem.c
++++ b/libiberty/cplus-dem.c
+@@ -56,6 +56,13 @@
+ void * realloc ();
+ #endif
+
++#ifdef HAVE_LIMITS_H
++#include <limits.h>
++#endif
++#ifndef INT_MAX
++# define INT_MAX (int)(((unsigned int) ~0) >> 1) /* 0x7FFFFFFF */
++#endif
++
+ #include <demangle.h>
+ #undef CURRENT_DEMANGLING_STYLE
+ #define CURRENT_DEMANGLING_STYLE work->options
+@@ -4231,6 +4238,8 @@
+ }
+ else
+ {
++ if (work -> typevec_size > INT_MAX / 2)
++ xmalloc_failed (INT_MAX);
+ work -> typevec_size *= 2;
+ work -> typevec
+ = XRESIZEVEC (char *, work->typevec, work->typevec_size);
+@@ -4258,6 +4267,8 @@
+ }
+ else
+ {
++ if (work -> ksize > INT_MAX / 2)
++ xmalloc_failed (INT_MAX);
+ work -> ksize *= 2;
+ work -> ktypevec
+ = XRESIZEVEC (char *, work->ktypevec, work->ksize);
+@@ -4287,6 +4298,8 @@
+ }
+ else
+ {
++ if (work -> bsize > INT_MAX / 2)
++ xmalloc_failed (INT_MAX);
+ work -> bsize *= 2;
+ work -> btypevec
+ = XRESIZEVEC (char *, work->btypevec, work->bsize);
+@@ -4741,6 +4754,8 @@
+ else if (s->e - s->p < n)
+ {
+ tem = s->p - s->b;
++ if (n > INT_MAX / 2 - tem)
++ xmalloc_failed (INT_MAX);
+ n += tem;
+ n *= 2;
+ s->b = XRESIZEVEC (char, s->b, n);
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-4487.patch
+++ binutils-2.22/debian/patches/CVE-2016-4487.patch
@@ -0,0 +1,11 @@
+--- a/libiberty/cplus-dem.c
++++ b/libiberty/cplus-dem.c
+@@ -1225,6 +1225,8 @@
+ if (work -> btypevec != NULL)
+ {
+ free ((char *) work -> btypevec);
++ work->btypevec = NULL;
++ work->bsize = 0;
+ }
+ if (work -> ktypevec != NULL)
+ {
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-4488.patch
+++ binutils-2.22/debian/patches/CVE-2016-4488.patch
@@ -0,0 +1,11 @@
+--- a/libiberty/cplus-dem.c
++++ b/libiberty/cplus-dem.c
+@@ -1231,6 +1231,8 @@
+ if (work -> ktypevec != NULL)
+ {
+ free ((char *) work -> ktypevec);
++ work->ktypevec = NULL;
++ work->bsize = 0;
+ }
+ }
+
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-4489.patch
+++ binutils-2.22/debian/patches/CVE-2016-4489.patch
@@ -0,0 +1,14 @@
+--- a/libiberty/cplus-dem.c
++++ b/libiberty/cplus-dem.c
+@@ -2990,6 +2990,11 @@
+ success = 1;
+ break;
+ }
++ else if (n == -1)
++ {
++ success = 0;
++ break;
++ }
+ }
+ else
+ {
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-4490-1.patch
+++ binutils-2.22/debian/patches/CVE-2016-4490-1.patch
@@ -0,0 +1,169 @@
+--- a/libiberty/cp-demangle.c
++++ b/libiberty/cp-demangle.c
+@@ -124,6 +124,13 @@
+ # endif /* alloca */
+ #endif /* HAVE_ALLOCA_H */
+
++#ifdef HAVE_LIMITS_H
++#include <limits.h>
++#endif
++#ifndef INT_MAX
++# define INT_MAX (int)(((unsigned int) ~0) >> 1) /* 0x7FFFFFFF */
++#endif
++
+ #include "ansidecl.h"
+ #include "libiberty.h"
+ #include "demangle.h"
+@@ -343,7 +350,7 @@
+ struct demangle_component *);
+
+ static struct demangle_component *
+-d_make_template_param (struct d_info *, long);
++d_make_template_param (struct d_info *, int);
+
+ static struct demangle_component *
+ d_make_sub (struct d_info *, const char *, int);
+@@ -366,7 +373,7 @@
+
+ static struct demangle_component *d_source_name (struct d_info *);
+
+-static long d_number (struct d_info *);
++static int d_number (struct d_info *);
+
+ static struct demangle_component *d_identifier (struct d_info *, int);
+
+@@ -988,7 +995,7 @@
+ /* Add a new template parameter. */
+
+ static struct demangle_component *
+-d_make_template_param (struct d_info *di, long i)
++d_make_template_param (struct d_info *di, int i)
+ {
+ struct demangle_component *p;
+
+@@ -1004,7 +1011,7 @@
+ /* Add a new function parameter. */
+
+ static struct demangle_component *
+-d_make_function_param (struct d_info *di, long i)
++d_make_function_param (struct d_info *di, int i)
+ {
+ struct demangle_component *p;
+
+@@ -1425,7 +1432,7 @@
+ static struct demangle_component *
+ d_source_name (struct d_info *di)
+ {
+- long len;
++ int len;
+ struct demangle_component *ret;
+
+ len = d_number (di);
+@@ -1438,12 +1445,12 @@
+
+ /* number ::= [n] <(non-negative decimal integer)> */
+
+-static long
++static int
+ d_number (struct d_info *di)
+ {
+ int negative;
+ char peek;
+- long ret;
++ int ret;
+
+ negative = 0;
+ peek = d_peek_char (di);
+@@ -1653,7 +1660,7 @@
+ {
+ struct demangle_component *p = NULL;
+ struct demangle_component *next = NULL;
+- long len, i;
++ int len, i;
+ char c;
+ const char *str;
+
+@@ -1793,7 +1800,7 @@
+ case 'C':
+ {
+ struct demangle_component *derived_type;
+- long offset;
++ int offset;
+ struct demangle_component *base_type;
+
+ derived_type = cplus_demangle_type (di);
+@@ -2547,10 +2554,10 @@
+
+ /* <non-negative number> _ */
+
+-static long
++static int
+ d_compact_number (struct d_info *di)
+ {
+- long num;
++ int num;
+ if (d_peek_char (di) == '_')
+ num = 0;
+ else if (d_peek_char (di) == 'n')
+@@ -2558,7 +2565,7 @@
+ else
+ num = d_number (di) + 1;
+
+- if (! d_check_char (di, '_'))
++ if (num < 0 || ! d_check_char (di, '_'))
+ return -1;
+ return num;
+ }
+@@ -2570,7 +2577,7 @@
+ static struct demangle_component *
+ d_template_param (struct d_info *di)
+ {
+- long param;
++ int param;
+
+ if (! d_check_char (di, 'T'))
+ return NULL;
+@@ -2756,9 +2763,10 @@
+ }
+ else
+ {
+- index = d_compact_number (di) + 1;
+- if (index == 0)
++ index = d_compact_number (di);
++ if (index == INT_MAX || index == -1)
+ return NULL;
++ index ++;
+ }
+ return d_make_function_param (di, index);
+ }
+@@ -3002,7 +3010,7 @@
+ static int
+ d_discriminator (struct d_info *di)
+ {
+- long discrim;
++ int discrim;
+
+ if (d_peek_char (di) != '_')
+ return 1;
+@@ -3058,7 +3066,7 @@
+ d_unnamed_type (struct d_info *di)
+ {
+ struct demangle_component *ret;
+- long num;
++ int num;
+
+ if (! d_check_char (di, 'U'))
+ return NULL;
+@@ -3378,10 +3386,10 @@
+ }
+
+ static inline void
+-d_append_num (struct d_print_info *dpi, long l)
++d_append_num (struct d_print_info *dpi, int l)
+ {
+ char buf[25];
+- sprintf (buf,"%ld", l);
++ sprintf (buf,"%d", l);
+ d_append_string (dpi, buf);
+ }
+
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-4490-2.patch
+++ binutils-2.22/debian/patches/CVE-2016-4490-2.patch
@@ -0,0 +1,16 @@
+--- a/libiberty/testsuite/demangle-expected
++++ b/libiberty/testsuite/demangle-expected
+@@ -4151,3 +4151,13 @@
+ --format=auto
+ _ZN3Psi7VariantIIcPKcEE5visitIIRZN11VariantTest9TestVisit11test_methodEvEUlS2_E0_RZNS6_11test_methodEvEUlcE1_RZNS6_11test_methodEvEUlNS_4NoneEE_EEENS_13VariantDetail19SelectVisitorResultIIDpT_EE4typeEDpOSG_
+ Psi::VariantDetail::SelectVisitorResult<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>::type Psi::Variant<char, char const*>::visit<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>((VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&)...)
++#
++# Tests integer overflow problem PR70492
++
++__vt_90000000000cafebabe
++__vt_90000000000cafebabe
++#
++# Tests write access violation PR70498
++
++_Z80800000000000000000000
++_Z80800000000000000000000
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-4492_CVE-2016-4493.patch
+++ binutils-2.22/debian/patches/CVE-2016-4492_CVE-2016-4493.patch
@@ -0,0 +1,59 @@
+--- a/libiberty/cplus-dem.c
++++ b/libiberty/cplus-dem.c
+@@ -2033,7 +2033,8 @@
+ else
+ {
+ int symbol_len = consume_count (mangled);
+- if (symbol_len == -1)
++ if (symbol_len == -1
++ || symbol_len > (long) strlen (*mangled))
+ return -1;
+ if (symbol_len == 0)
+ string_appendn (s, "0", 1);
+@@ -3593,7 +3594,7 @@
+ /* A back reference to a previously seen type */
+ case 'T':
+ (*mangled)++;
+- if (!get_count (mangled, &n) || n >= work -> ntypes)
++ if (!get_count (mangled, &n) || n < 0 || n >= work -> ntypes)
+ {
+ success = 0;
+ }
+@@ -3768,7 +3769,7 @@
+ /* A back reference to a previously seen squangled type */
+ case 'B':
+ (*mangled)++;
+- if (!get_count (mangled, &n) || n >= work -> numb)
++ if (!get_count (mangled, &n) || n < 0 || n >= work -> numb)
+ success = 0;
+ else
+ string_append (result, work->btypevec[n]);
+@@ -4109,7 +4110,8 @@
+
+ literal_len = consume_count (mangled);
+
+- if (literal_len <= 0)
++ if (literal_len <= 0
++ || literal_len > (long) strlen (*mangled))
+ return 0;
+
+ /* Literal parameters are names of arrays, functions, etc. and the
+--- a/libiberty/testsuite/demangle-expected
++++ b/libiberty/testsuite/demangle-expected
+@@ -4161,3 +4161,16 @@
+
+ _Z80800000000000000000000
+ _Z80800000000000000000000
++#
++# Tests write access violation PR70926
++
++0__Ot2m02R5T0000500000
++0__Ot2m02R5T0000500000
++#
++
++0__GT50000000000_
++0__GT50000000000_
++#
++
++__t2m05B500000000000000000_
++__t2m05B500000000000000000_
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-4493.patch
+++ binutils-2.22/debian/patches/CVE-2016-4493.patch
@@ -0,0 +1,63 @@
+Index: libiberty/cplus-dem.c
+===================================================================
+--- a/libiberty/cplus-dem.c (revision 235801)
++++ b/libiberty/cplus-dem.c (working copy)
+@@ -2051,7 +2051,8 @@ demangle_template_value_parm (struct work_stuff *w
+ else
+ {
+ int symbol_len = consume_count (mangled);
+- if (symbol_len == -1)
++ if (symbol_len == -1
++ || symbol_len > (long) strlen (*mangled))
+ return -1;
+ if (symbol_len == 0)
+ string_appendn (s, "0", 1);
+@@ -3611,7 +3612,7 @@ do_type (struct work_stuff *work, const char **man
+ /* A back reference to a previously seen type */
+ case 'T':
+ (*mangled)++;
+- if (!get_count (mangled, &n) || n >= work -> ntypes)
++ if (!get_count (mangled, &n) || n < 0 || n >= work -> ntypes)
+ {
+ success = 0;
+ }
+@@ -3789,7 +3790,7 @@ do_type (struct work_stuff *work, const char **man
+ /* A back reference to a previously seen squangled type */
+ case 'B':
+ (*mangled)++;
+- if (!get_count (mangled, &n) || n >= work -> numb)
++ if (!get_count (mangled, &n) || n < 0 || n >= work -> numb)
+ success = 0;
+ else
+ string_append (result, work->btypevec[n]);
+@@ -4130,7 +4131,8 @@ do_hpacc_template_literal (struct work_stuff *work
+
+ literal_len = consume_count (mangled);
+
+- if (literal_len <= 0)
++ if (literal_len <= 0
++ || literal_len > (long) strlen (*mangled))
+ return 0;
+
+ /* Literal parameters are names of arrays, functions, etc. and the
+Index: libiberty/testsuite/demangle-expected
+===================================================================
+--- a/libiberty/testsuite/demangle-expected (revision 235801)
++++ b/libiberty/testsuite/demangle-expected (working copy)
+@@ -4441,3 +4441,16 @@ __vt_90000000000cafebabe
+
+ _Z80800000000000000000000
+ _Z80800000000000000000000
++#
++# Tests write access violation PR70926
++
++0__Ot2m02R5T0000500000
++0__Ot2m02R5T0000500000
++#
++
++0__GT50000000000_
++0__GT50000000000_
++#
++
++__t2m05B500000000000000000_
++__t2m05B500000000000000000_
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-6131.patch
+++ binutils-2.22/debian/patches/CVE-2016-6131.patch
@@ -0,0 +1,153 @@
+--- a/libiberty/cplus-dem.c
++++ b/libiberty/cplus-dem.c
+@@ -144,6 +144,9 @@
+ string* previous_argument; /* The last function argument demangled. */
+ int nrepeats; /* The number of times to repeat the previous
+ argument. */
++ int *proctypevec; /* Indices of currently processed remembered typevecs. */
++ int proctypevec_size;
++ int nproctypes;
+ };
+
+ #define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI)
+@@ -429,6 +432,10 @@
+
+ static void remember_type (struct work_stuff *, const char *, int);
+
++static void push_processed_type (struct work_stuff *, int);
++
++static void pop_processed_type (struct work_stuff *);
++
+ static void remember_Btype (struct work_stuff *, const char *, int, int);
+
+ static int register_Btype (struct work_stuff *);
+@@ -1283,6 +1290,13 @@
+ memcpy (to->btypevec[i], from->btypevec[i], len);
+ }
+
++ if (from->proctypevec)
++ {
++ to->proctypevec = XNEWVEC (int, from->proctypevec_size);
++ memcpy (to->proctypevec, from->proctypevec,
++ from->proctypevec_size * sizeof(int));
++ }
++
+ if (from->ntmpl_args)
+ to->tmpl_argvec = XNEWVEC (char *, from->ntmpl_args);
+
+@@ -1317,6 +1331,12 @@
+ work -> typevec = NULL;
+ work -> typevec_size = 0;
+ }
++ if (work -> proctypevec != NULL)
++ {
++ free (work -> proctypevec);
++ work -> proctypevec = NULL;
++ work -> proctypevec_size = 0;
++ }
+ if (work->tmpl_argvec)
+ {
+ int i;
+@@ -3535,6 +3555,8 @@
+ do_type (struct work_stuff *work, const char **mangled, string *result)
+ {
+ int n;
++ int i;
++ int is_proctypevec;
+ int done;
+ int success;
+ string decl;
+@@ -3547,6 +3569,7 @@
+
+ done = 0;
+ success = 1;
++ is_proctypevec = 0;
+ while (success && !done)
+ {
+ int member;
+@@ -3599,7 +3622,14 @@
+ success = 0;
+ }
+ else
+- {
++ for (i = 0; i < work -> nproctypes; i++)
++ if (work -> proctypevec [i] == n)
++ success = 0;
++
++ if (success)
++ {
++ is_proctypevec = 1;
++ push_processed_type (work, n);
+ remembered_type = work -> typevec[n];
+ mangled = &remembered_type;
+ }
+@@ -3820,6 +3850,9 @@
+ string_delete (result);
+ string_delete (&decl);
+
++ if (is_proctypevec)
++ pop_processed_type (work);
++
+ if (success)
+ /* Assume an integral type, if we're not sure. */
+ return (int) ((tk == tk_none) ? tk_integral : tk);
+@@ -4233,6 +4266,34 @@
+ }
+
+ static void
++push_processed_type (struct work_stuff *work, int typevec_index)
++{
++ if (work -> nproctypes >= work -> proctypevec_size)
++ {
++ if (work -> proctypevec_size == 0)
++ {
++ work -> proctypevec_size = 3;
++ work -> proctypevec = XNEWVEC (int, work -> proctypevec_size);
++ }
++ else
++ {
++ if (work -> proctypevec_size > INT_MAX / 2)
++ xmalloc_failed (INT_MAX);
++ work -> proctypevec_size *= 2;
++ work -> proctypevec
++ = XRESIZEVEC (int, work->proctypevec, work->proctypevec_size);
++ }
++ }
++ work -> proctypevec [work -> nproctypes ++] = typevec_index;
++}
++
++static void
++pop_processed_type (struct work_stuff *work)
++{
++ work -> nproctypes --;
++}
++
++static void
+ remember_type (struct work_stuff *work, const char *start, int len)
+ {
+ char *tem;
+@@ -4496,10 +4557,13 @@
+ {
+ string_append (declp, ", ");
+ }
++ push_processed_type (work, t);
+ if (!do_arg (work, &tem, &arg))
+ {
++ pop_processed_type (work);
+ return (0);
+ }
++ pop_processed_type (work);
+ if (PRINT_ARG_TYPES)
+ {
+ string_appends (declp, &arg);
+--- a/libiberty/testsuite/demangle-expected
++++ b/libiberty/testsuite/demangle-expected
+@@ -4174,3 +4174,8 @@
+
+ __t2m05B500000000000000000_
+ __t2m05B500000000000000000_
++#
++# Tests stack overflow PR71696
++
++__10%0__S4_0T0T0
++%0<>::%0(%0<>)
only in patch2:
unchanged:
--- binutils-2.22.orig/debian/patches/CVE-2016-XXXX.patch
+++ binutils-2.22/debian/patches/CVE-2016-XXXX.patch
@@ -0,0 +1,62 @@
+From 7e27a9d5f22f9f7ead11738b1546d0b5c737266b Mon Sep 17 00:00:00 2001
+From: Yuriy M. Kaminskiy <yumkam@gmail.com>
+Date: Tue, 4 Aug 2015 16:51:53 +0100
+Subject: [PATCH] Fix stack buffer overflows when parsing corrupt ihex files.
+
+ PR binutils/18750
+ * ihex.c (ihex_scan): Fixes incorrect escape sequence in error message
+ and stack overflow when char is signed and \200-\376 was in place of hex
+ digit; also fixes \377 was handled as EOF instead of "incorrect character".
+ (ihex_read_section): Changed for consistency.
+ (ihex_bad_byte): Prevent (now impossible to trigger) stack
+ overflow and incorrect escape sequence handling.
+ * srec.c (srec_bad_byte): Likewise.
+
+ * readelf.c (process_mips_specific): Fix incorrect escape
+ sequence handling.
+---
+ bfd/ihex.c | 6 +++---
+ bfd/srec.c | 2 +-
+ binutils/readelf.c | 2 +-
+ 5 files changed, 28 insertions(+), 5 deletions(-)
+
+--- a/bfd/ihex.c
++++ b/bfd/ihex.c
+@@ -220,7 +220,7 @@
+ char buf[10];
+
+ if (! ISPRINT (c))
+- sprintf (buf, "\\%03o", (unsigned int) c);
++ sprintf (buf, "\\%03o", (unsigned int) c & 0xff);
+ else
+ {
+ buf[0] = c;
+@@ -277,7 +277,7 @@
+ else
+ {
+ file_ptr pos;
+- char hdr[8];
++ unsigned char hdr[8];
+ unsigned int i;
+ unsigned int len;
+ bfd_vma addr;
+@@ -554,7 +554,7 @@
+ error = FALSE;
+ while ((c = ihex_get_byte (abfd, &error)) != EOF)
+ {
+- char hdr[8];
++ unsigned char hdr[8];
+ unsigned int len;
+ unsigned int type;
+ unsigned int i;
+--- a/bfd/srec.c
++++ b/bfd/srec.c
+@@ -251,7 +251,7 @@
+ char buf[40];
+
+ if (! ISPRINT (c))
+- sprintf (buf, "\\%03o", (unsigned int) c);
++ sprintf (buf, "\\%03o", (unsigned int) c & 0xff);
+ else
+ {
+ buf[0] = c;
Reply to:
- References:
- CVE-2016-6131 binutils, gdb, valgrind etc.
- From: Markus Koschany <apo@debian.org>
- Re: CVE-2016-6131 binutils, gdb, valgrind etc.
- From: Brian May <bam@debian.org>
- Re: CVE-2016-6131 binutils, gdb, valgrind etc.
- From: Markus Koschany <apo@debian.org>
- Re: CVE-2016-6131 binutils, gdb, valgrind etc.
- From: Holger Levsen <holger@layer-acht.org>
- Re: CVE-2016-6131 binutils, gdb, valgrind etc.
- From: Bálint Réczey <balint@balintreczey.hu>
- Re: CVE-2016-6131 binutils, gdb, valgrind etc.
- From: Brian May <bam@debian.org>