From e74073f4f68afea071fddfdb6b0ea180f8c86559 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 4 Dec 2015 16:38:16 +0100 Subject: [PATCH] ping plugin: Limit payload to 65487 bytes. A couple of coding style fixes have also been applied. --- src/ping.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/ping.c b/src/ping.c index cac8a3fd..85421647 100644 --- a/src/ping.c +++ b/src/ping.c @@ -543,26 +543,21 @@ static int ping_config (const char *key, const char *value) /* {{{ */ tmp, value); } else if (strcasecmp (key, "Size") == 0) { - int size; + size_t size = (size_t) atoi (value); - if (ping_data != NULL) + /* Max IP packet size - (IPv6 + ICMP) = 65535 - (40 + 8) = 65487 */ + if (size <= 65487) { - free (ping_data); - ping_data = NULL; - } + size_t i; - size = atoi (value); - if ((size >= 0) && (size <= 65536)) - { - int i; - ping_data = (char *) malloc(size + 1); + sfree (ping_data); + ping_data = malloc (size + 1); if (ping_data == NULL) { - char errbuf[1024]; - ERROR ("ping plugin: malloc failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); + ERROR ("ping plugin: malloc failed."); return (1); } + /* Note: By default oping is using constant string * "liboping -- ICMP ping library " * which is exactly 56 bytes. @@ -576,9 +571,9 @@ static int ping_config (const char *key, const char *value) /* {{{ */ * printable characters, and not NUL character. */ ping_data[i] = ('0' + i % 64); } /* }}} for (i = 0; i < size; i++) */ - ping_data[size] = '\0'; + ping_data[size] = 0; } else - WARNING ("ping plugin: Ignoring invalid Size %i.", size); + WARNING ("ping plugin: Ignoring invalid Size %zu.", size); } else if (strcasecmp (key, "Timeout") == 0) { -- 2.30.2