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

Gedare Bloom gedare at rtems.org
Thu Sep 3 15:20:39 UTC 2015


Joel,

Review/Commit these if happy.

Gedare

On Wed, Sep 2, 2015 at 5:54 PM, Martin Galvan
<martin.galvan at tallertechnologies.com> wrote:
> 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:
> --
> 2.5.1
>



More information about the devel mailing list