From: Florian Forster Date: Tue, 19 Jul 2016 08:00:37 +0000 (+0200) Subject: network plugin: Fix heap overflow in parse_packet(). X-Git-Tag: collectd-5.5.2~3^2 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=b589096f907052b3a4da2b9ccc9b0e2e888dfc18;p=collectd.git network plugin: Fix heap overflow in parse_packet(). Emilien Gaspar has identified a heap overflow in parse_packet(), the function used by the network plugin to parse incoming network packets. This is a vulnerability in collectd, though the scope is not clear at this point. At the very least specially crafted network packets can be used to crash the daemon. We can't rule out a potential remote code execution though. Fixes: CVE-2016-6254 --- diff --git a/src/network.c b/src/network.c index 0ee6ed0b..5c7761d3 100644 --- a/src/network.c +++ b/src/network.c @@ -1435,6 +1435,7 @@ static int parse_packet (sockent_t *se, /* {{{ */ printed_ignore_warning = 1; } buffer = ((char *) buffer) + pkg_length; + buffer_size -= (size_t) pkg_length; continue; } #endif /* HAVE_LIBGCRYPT */ @@ -1462,6 +1463,7 @@ static int parse_packet (sockent_t *se, /* {{{ */ printed_ignore_warning = 1; } buffer = ((char *) buffer) + pkg_length; + buffer_size -= (size_t) pkg_length; continue; } #endif /* HAVE_LIBGCRYPT */ @@ -1603,6 +1605,7 @@ static int parse_packet (sockent_t *se, /* {{{ */ DEBUG ("network plugin: parse_packet: Unknown part" " type: 0x%04hx", pkg_type); buffer = ((char *) buffer) + pkg_length; + buffer_size -= (size_t) pkg_length; } } /* while (buffer_size > sizeof (part_header_t)) */