diff options
| author | Roy Marples <roy@marples.name> | 2012-11-14 10:32:08 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2012-11-14 10:32:08 +0000 |
| commit | 8514c011eaef6da5a2a03479c15a84d2d56f05c0 (patch) | |
| tree | 770864e94061858332e63cf8f1232a514717819a | |
| parent | 2534ef40f282896d5803d38b8f4e561ce6e731e8 (diff) | |
| download | dhcpcd-8514c011eaef6da5a2a03479c15a84d2d56f05c0.tar.xz | |
Fix some more potential leaks and allow full build with dmalloc.
| -rw-r--r-- | common.c | 24 | ||||
| -rw-r--r-- | dhcpcd.c | 7 |
2 files changed, 20 insertions, 11 deletions
@@ -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; +} @@ -97,6 +97,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; @@ -188,6 +189,7 @@ cleanup(void) for (i = 0; i < ifdc; i++) free(ifdv[i]); free(ifdv); + free(packet); #endif if (linkfd != -1) @@ -660,7 +662,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; @@ -670,7 +671,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); @@ -739,6 +741,7 @@ handle_dhcp_packet(void *arg) break; } free(packet); + packet = NULL; free(dhcp); } |
