[rtems commit] cpukit/libnetworking/rtems/rtems_dhcp.c: Fix leak on realloc failure for dhcp_hostname.

Joel Sherril joel at rtems.org
Thu Sep 3 16:27:54 UTC 2015


Module:    rtems
Branch:    4.11
Commit:    c62129c5bcaf2b10baf7d3e1b856c81e343c4b5b
Changeset: http://git.rtems.org/rtems/commit/?id=c62129c5bcaf2b10baf7d3e1b856c81e343c4b5b

Author:    Martin Galvan <martin.galvan at tallertechnologies.com>
Date:      Wed Sep  2 16:54:25 2015 -0500

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 c938ee0..87be238 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:



More information about the vc mailing list