summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2011-03-03 21:09:29 +0100
committerMichael Brown2011-03-03 21:09:29 +0100
commitbbe265e08ba42380deaef81fc6aa4d781a9e01e0 (patch)
tree21b138f7213631f8dad721dd8c53c0fe9e1ad671
parent[settings] Make fetch_string_setting_copy() easier to use (diff)
downloadipxe-bbe265e08ba42380deaef81fc6aa4d781a9e01e0.tar.gz
ipxe-bbe265e08ba42380deaef81fc6aa4d781a9e01e0.tar.xz
ipxe-bbe265e08ba42380deaef81fc6aa4d781a9e01e0.zip
[dns] Fix memory leak in settings applicator
Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/net/udp/dns.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/net/udp/dns.c b/src/net/udp/dns.c
index be7a98e7f..2326284bf 100644
--- a/src/net/udp/dns.c
+++ b/src/net/udp/dns.c
@@ -612,16 +612,23 @@ static int apply_dns_settings ( void ) {
( struct sockaddr_in * ) &nameserver;
int len;
+ /* Fetch DNS server address */
+ nameserver.st_family = 0;
if ( ( len = fetch_ipv4_setting ( NULL, &dns_setting,
&sin_nameserver->sin_addr ) ) >= 0 ){
- sin_nameserver->sin_family = AF_INET;
+ nameserver.st_family = AF_INET;
DBG ( "DNS using nameserver %s\n",
inet_ntoa ( sin_nameserver->sin_addr ) );
}
/* Get local domain DHCP option */
+ free ( localdomain );
if ( ( len = fetch_string_setting_copy ( NULL, &domain_setting,
- &localdomain ) ) >= 0 )
+ &localdomain ) ) < 0 ) {
+ DBG ( "DNS could not fetch local domain: %s\n",
+ strerror ( len ) );
+ }
+ if ( localdomain )
DBG ( "DNS local domain %s\n", localdomain );
return 0;