Re: Memory leak in Libnet

Frédéric Raynal <[email protected]> Tue, 6 Apr 2004 21:04:32 +0200
Newsgroups gmane.comp.security.libnet
Message-ID <[email protected]>
On Tue, Apr 06, 2004 at 11:27:39AM -0700, [email protected] wrote:
> Hi Frederic,
> 
> "AL" is a structure of the following type:
> 
> struct libnet_ifaddr_list
> {
>     u_int32_t addr;
>     int8_t *device;
> };
> 
> So although "al" itself is static variable, its field "device"
> points to dynamically allocated memory (in this case, allocated
> by strdup()). Thus the old memory allocated for al->device need
> to be freed before new memory is allocated for al->device.
> 
> In fact, parasoft's insure++ reports a memory leak at this strdup()
> which is where I come from.
> 
> I did the following patch and it seems the "memory leak" is gone:
> 
> [libnet_if_addr.c]
>      238
>  +               if (al->device) free(al->device);
>      239         if ((al->device = strdup(device)) == NULL)
>      240         {
>      241             snprintf(errbuf, LIBNET_ERRBUF_SIZE,
>      242                     "%s(): strdup not enough memory\n", __func__);
>      243             return(-1);
>      244         }
> 


Oops ;-)    

hekaddr-reg 1 - 0 Fred


	Fred Raynal