From 8614cf0ad4a017184285e814a704322f59a28869 Mon Sep 17 00:00:00 2001 From: Michael Heimpold Date: Wed, 12 Apr 2017 23:36:17 +0200 Subject: [PATCH] dataxfer.c: fix possible buffer overruns caused by gai_strerror This fixes a possible buffer overrun that could occur due to gai_strerror() returning a string which is longer than the portbuff array, i.e. longer than 32 byte. Reported-by: David Thornley Signed-off-by: Michael Heimpold Signed-off-by: Corey Minyard diff --git a/dataxfer.c b/dataxfer.c index 3d1e713..988f4e4 100644 --- a/dataxfer.c +++ b/dataxfer.c @@ -3702,18 +3702,20 @@ showshortport(struct controller_info *cntlr, port_info_t *port) portbuff, sizeof(portbuff), NI_NUMERICHOST | NI_NUMERICSERV); if (err) { - strcpy(buffer, "*err*"); - sprintf(portbuff, "%s", gai_strerror(err)); + snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err)); + count = controller_outputf(cntlr, "%s", buffer); + } else { + count = controller_outputf(cntlr, "%s,%s", buffer, portbuff); } - bytes_recv = netcon->bytes_received; - bytes_sent = netcon->bytes_sent; - count = controller_outputf(cntlr, "%s,%s", buffer, portbuff); while (count < 23) { controller_outs(cntlr, " "); count++; } + bytes_recv = netcon->bytes_received; + bytes_sent = netcon->bytes_sent; + controller_outputf(cntlr, "%-22s ", port->io.devname); controller_outputf(cntlr, "%-14s ", state_str[port->net_to_dev_state]); controller_outputf(cntlr, "%-14s ", state_str[port->dev_to_net_state]); @@ -3758,11 +3760,12 @@ showport(struct controller_info *cntlr, port_info_t *port) portbuff, sizeof(portbuff), NI_NUMERICHOST | NI_NUMERICSERV); if (err) { - strcpy(buffer, "*err*"); - sprintf(portbuff, "%s", gai_strerror(err)); + snprintf(buffer, sizeof(buffer), "*err*,%s", gai_strerror(err)); + controller_outputf(cntlr, " connected to: %s\r\n", buffer); + } else { + controller_outputf(cntlr, " connected to: %s,%s\r\n", + buffer, portbuff); } - controller_outputf(cntlr, " connected to: %s,%s\r\n", - buffer, portbuff); controller_outputf(cntlr, " bytes read from TCP: %d\r\n", netcon->bytes_received); controller_outputf(cntlr, " bytes written to TCP: %d\r\n", -- 2.7.4