From 1ad7c05b928b9fb581bc8a50d804241a498daa92 Mon Sep 17 00:00:00 2001 From: Will Szumski Date: Wed, 23 Nov 2016 01:00:11 +0000 Subject: [PATCH 1/2] Do not validate the autodetected IPs of additional address families when using -4 (IPV4 only) and -6 (IPv6 only) flags --- src/iodined.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/iodined.c b/src/iodined.c index 2e6f7bf..c213ec6 100644 --- a/src/iodined.c +++ b/src/iodined.c @@ -1844,10 +1844,10 @@ tunnel(int tun_fd, struct dnsfd *dns_fds, int bind_fd, int max_idle_time) if (FD_ISSET(tun_fd, &fds)) { tunnel_tun(tun_fd, dns_fds); } - if (FD_ISSET(dns_fds->v4fd, &fds)) { + if (dns_fds->v4fd >= 0 && FD_ISSET(dns_fds->v4fd, &fds)) { tunnel_dns(tun_fd, dns_fds->v4fd, dns_fds, bind_fd); } - if (FD_ISSET(dns_fds->v6fd, &fds)) { + if (dns_fds->v6fd >= 0 && FD_ISSET(dns_fds->v6fd, &fds)) { tunnel_dns(tun_fd, dns_fds->v6fd, dns_fds, bind_fd); } if (FD_ISSET(bind_fd, &fds)) { @@ -2592,16 +2592,19 @@ main(int argc, char **argv) fprintf(stderr, "Add more -D switches to set higher debug level.\n"); foreground = 1; } - - dns4addr_len = get_addr(listen_ip4, port, AF_INET, AI_PASSIVE | AI_NUMERICHOST, &dns4addr); - if (dns4addr_len < 0) { - warnx("Bad IPv4 address to listen on."); - usage(); + if (addrfamily == AF_UNSPEC || addrfamily == AF_INET) { + dns4addr_len = get_addr(listen_ip4, port, AF_INET, AI_PASSIVE | AI_NUMERICHOST, &dns4addr); + if (dns4addr_len < 0) { + warnx("Bad IPv4 address to listen on."); + usage(); + } } - dns6addr_len = get_addr(listen_ip6, port, AF_INET6, AI_PASSIVE | AI_NUMERICHOST, &dns6addr); - if (dns6addr_len < 0) { - warnx("Bad IPv6 address to listen on."); - usage(); + if (addrfamily == AF_UNSPEC || addrfamily == AF_INET6) { + dns6addr_len = get_addr(listen_ip6, port, AF_INET6, AI_PASSIVE | AI_NUMERICHOST, &dns6addr); + if (dns6addr_len < 0) { + warnx("Bad IPv6 address to listen on."); + usage(); + } } if(bind_enable) { From 68443abd6099c9f7e9be82490cb4b4829172faf8 Mon Sep 17 00:00:00 2001 From: Jes Bodi Klinke Date: Tue, 29 Nov 2016 11:10:38 -0800 Subject: [PATCH 2/2] Fixed non-standard passing of va_list into functions declared with ... --- src/common.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/common.c b/src/common.c index ce6c2aa..f8719df 100644 --- a/src/common.c +++ b/src/common.c @@ -405,12 +405,9 @@ inet_aton(const char *cp, struct in_addr *inp) #endif void -warn(const char *fmt, ...) +vwarn(const char *fmt, va_list list) { - va_list list; - - va_start(list, fmt); - if (fmt) fprintf(stderr, fmt, list); + if (fmt) vfprintf(stderr, fmt, list); #ifndef ANDROID if (errno == 0) { fprintf(stderr, ": WSA error %d\n", WSAGetLastError()); @@ -418,17 +415,32 @@ warn(const char *fmt, ...) fprintf(stderr, ": %s\n", strerror(errno)); } #endif +} + +void +warn(const char *fmt, ...) +{ + va_list list; + + va_start(list, fmt); + vwarn(fmt, list); va_end(list); } +void +vwarnx(const char *fmt, va_list list) +{ + if (fmt) vfprintf(stderr, fmt, list); + fprintf(stderr, "\n"); +} + void warnx(const char *fmt, ...) { va_list list; va_start(list, fmt); - if (fmt) fprintf(stderr, fmt, list); - fprintf(stderr, "\n"); + vwarnx(fmt, list); va_end(list); } @@ -438,7 +450,7 @@ err(int eval, const char *fmt, ...) va_list list; va_start(list, fmt); - warn(fmt, list); + vwarn(fmt, list); va_end(list); exit(eval); } @@ -449,7 +461,7 @@ errx(int eval, const char *fmt, ...) va_list list; va_start(list, fmt); - warnx(fmt, list); + vwarnx(fmt, list); va_end(list); exit(eval); }