From c62129c5bcaf2b10baf7d3e1b856c81e343c4b5b Mon Sep 17 00:00:00 2001 From: Martin Galvan Date: Wed, 2 Sep 2015 16:54:25 -0500 Subject: cpukit/libnetworking/rtems/rtems_dhcp.c: Fix leak on realloc failure for dhcp_hostname. Closes #2405. --- cpukit/libnetworking/rtems/rtems_dhcp.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/cpukit/libnetworking/rtems/rtems_dhcp.c b/cpukit/libnetworking/rtems/rtems_dhcp.c index c938ee028f..87be238ddb 100644 --- a/cpukit/libnetworking/rtems/rtems_dhcp.c +++ b/cpukit/libnetworking/rtems/rtems_dhcp.c @@ -394,15 +394,23 @@ process_options (unsigned char *optbuf, int optbufSize) printf ("dhcpc: hostname >= %d bytes\n", MAXHOSTNAMELEN); len = MAXHOSTNAMELEN-1; } - if (sethostname (p, len) < 0) + if (sethostname (p, len) < 0) { printf ("dhcpc: can't set host name"); + } if (dhcp_hostname != NULL) { - dhcp_hostname = realloc (dhcp_hostname, len); - strncpy (dhcp_hostname, p, len); - } - else + char *tmp = realloc (dhcp_hostname, len); + if (tmp != NULL) { + dhcp_hostname = tmp; + strncpy (dhcp_hostname, p, len); + } else { /* realloc failed */ + printf ("dhcpc: realloc failed (%s:%d)", __FILE__, __LINE__); + free (dhcp_hostname); + dhcp_hostname = NULL; + } + } else { /* dhcp_hostname == NULL */ dhcp_hostname = strndup (p, len); + } break; case 7: -- cgit v1.2.3