From: root@uberpc.marples.name Date: Thu, 1 Nov 2012 17:02:01 +0000 (+0000) Subject: Fix some more potential leaks and allow full build with dmalloc. X-Git-Tag: v5.99.3~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=930c51ad338cd90e61f2308528de79c0669d00ca;p=thirdparty%2Fdhcpcd.git Fix some more potential leaks and allow full build with dmalloc. --- diff --git a/common.c b/common.c index 05b547b7..15fe3771 100644 --- a/common.c +++ b/common.c @@ -251,6 +251,7 @@ writepid(int fd, pid_t pid) return 0; } +#ifndef xmalloc void * xmalloc(size_t s) { @@ -262,16 +263,9 @@ xmalloc(size_t s) exit (EXIT_FAILURE); /* NOTREACHED */ } +#endif -void * -xzalloc(size_t s) -{ - void *value = xmalloc(s); - - memset(value, 0, s); - return value; -} - +#ifndef xrealloc void * xrealloc(void *ptr, size_t s) { @@ -283,7 +277,9 @@ xrealloc(void *ptr, size_t s) exit(EXIT_FAILURE); /* NOTREACHED */ } +#endif +#ifndef xstrdup char * xstrdup(const char *str) { @@ -299,3 +295,13 @@ xstrdup(const char *str) exit(EXIT_FAILURE); /* NOTREACHED */ } +#endif + +void * +xzalloc(size_t s) +{ + void *value = xmalloc(s); + + memset(value, 0, s); + return value; +} diff --git a/dhcpcd.c b/dhcpcd.c index 62ed3768..0c62a433 100644 --- a/dhcpcd.c +++ b/dhcpcd.c @@ -100,6 +100,7 @@ static int ifc; static char *cffile; static char *pidfile; static int linkfd = -1, ipv6rsfd = -1, ipv6nsfd = -1; +static uint8_t *packet; struct dhcp_op { uint8_t value; @@ -191,6 +192,7 @@ cleanup(void) for (i = 0; i < ifdc; i++) free(ifdv[i]); free(ifdv); + free(packet); #endif if (linkfd != -1) @@ -664,7 +666,6 @@ static void handle_dhcp_packet(void *arg) { struct interface *iface = arg; - uint8_t *packet; struct dhcp_message *dhcp = NULL; const uint8_t *pp; ssize_t bytes; @@ -674,7 +675,8 @@ handle_dhcp_packet(void *arg) /* We loop through until our buffer is empty. * The benefit is that if we get >1 DHCP packet in our buffer and * the first one fails for any reason, we can use the next. */ - packet = xmalloc(udp_dhcp_len); + if (packet == NULL) + packet = xmalloc(udp_dhcp_len); for(;;) { bytes = get_raw_packet(iface, ETHERTYPE_IP, packet, udp_dhcp_len, &partialcsum); @@ -743,6 +745,7 @@ handle_dhcp_packet(void *arg) break; } free(packet); + packet = NULL; free(dhcp); }