mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-24 16:49:35 -05:00
- Fix for #878: Invalid IP address in unbound.conf causes Segmentation
Fault on OpenBSD.
This commit is contained in:
parent
e11d206a82
commit
fe46bc47d7
2 changed files with 21 additions and 9 deletions
|
|
@ -1,3 +1,7 @@
|
||||||
|
19 April 2023: Wouter
|
||||||
|
- Fix for #878: Invalid IP address in unbound.conf causes Segmentation
|
||||||
|
Fault on OpenBSD.
|
||||||
|
|
||||||
14 April 2023: Wouter
|
14 April 2023: Wouter
|
||||||
- Merge #875: change obsolete txt URL in unbound-anchor.c to point
|
- Merge #875: change obsolete txt URL in unbound-anchor.c to point
|
||||||
to RFC 7958, and Fix #874.
|
to RFC 7958, and Fix #874.
|
||||||
|
|
|
||||||
|
|
@ -1018,7 +1018,7 @@ make_sock(int stype, const char* ifname, const char* port,
|
||||||
log_err("node %s:%s getaddrinfo: %s %s",
|
log_err("node %s:%s getaddrinfo: %s %s",
|
||||||
ifname?ifname:"default", port, gai_strerror(r),
|
ifname?ifname:"default", port, gai_strerror(r),
|
||||||
#ifdef EAI_SYSTEM
|
#ifdef EAI_SYSTEM
|
||||||
r==EAI_SYSTEM?(char*)strerror(errno):""
|
(r==EAI_SYSTEM?(char*)strerror(errno):"")
|
||||||
#else
|
#else
|
||||||
""
|
""
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1252,6 +1252,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
|
if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
|
||||||
&noip6, rcv, snd, reuseport, transparent,
|
&noip6, rcv, snd, reuseport, transparent,
|
||||||
tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) {
|
tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) {
|
||||||
|
if(ub_sock->addr)
|
||||||
freeaddrinfo(ub_sock->addr);
|
freeaddrinfo(ub_sock->addr);
|
||||||
free(ub_sock);
|
free(ub_sock);
|
||||||
if(noip6) {
|
if(noip6) {
|
||||||
|
|
@ -1263,6 +1264,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
/* getting source addr packet info is highly non-portable */
|
/* getting source addr packet info is highly non-portable */
|
||||||
if(!set_recvpktinfo(s, hints->ai_family)) {
|
if(!set_recvpktinfo(s, hints->ai_family)) {
|
||||||
sock_close(s);
|
sock_close(s);
|
||||||
|
if(ub_sock->addr)
|
||||||
freeaddrinfo(ub_sock->addr);
|
freeaddrinfo(ub_sock->addr);
|
||||||
free(ub_sock);
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1271,6 +1273,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
?listen_type_udpancil_dnscrypt:listen_type_udpancil,
|
?listen_type_udpancil_dnscrypt:listen_type_udpancil,
|
||||||
is_pp2, ub_sock)) {
|
is_pp2, ub_sock)) {
|
||||||
sock_close(s);
|
sock_close(s);
|
||||||
|
if(ub_sock->addr)
|
||||||
freeaddrinfo(ub_sock->addr);
|
freeaddrinfo(ub_sock->addr);
|
||||||
free(ub_sock);
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1283,6 +1286,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
|
if((s = make_sock_port(SOCK_DGRAM, ifname, port, hints, 1,
|
||||||
&noip6, rcv, snd, reuseport, transparent,
|
&noip6, rcv, snd, reuseport, transparent,
|
||||||
tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) {
|
tcp_mss, nodelay, freebind, use_systemd, dscp, ub_sock)) == -1) {
|
||||||
|
if(ub_sock->addr)
|
||||||
freeaddrinfo(ub_sock->addr);
|
freeaddrinfo(ub_sock->addr);
|
||||||
free(ub_sock);
|
free(ub_sock);
|
||||||
if(noip6) {
|
if(noip6) {
|
||||||
|
|
@ -1295,6 +1299,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
?listen_type_udp_dnscrypt:listen_type_udp,
|
?listen_type_udp_dnscrypt:listen_type_udp,
|
||||||
is_pp2, ub_sock)) {
|
is_pp2, ub_sock)) {
|
||||||
sock_close(s);
|
sock_close(s);
|
||||||
|
if(ub_sock->addr)
|
||||||
freeaddrinfo(ub_sock->addr);
|
freeaddrinfo(ub_sock->addr);
|
||||||
free(ub_sock);
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1318,6 +1323,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1,
|
if((s = make_sock_port(SOCK_STREAM, ifname, port, hints, 1,
|
||||||
&noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay,
|
&noip6, 0, 0, reuseport, transparent, tcp_mss, nodelay,
|
||||||
freebind, use_systemd, dscp, ub_sock)) == -1) {
|
freebind, use_systemd, dscp, ub_sock)) == -1) {
|
||||||
|
if(ub_sock->addr)
|
||||||
freeaddrinfo(ub_sock->addr);
|
freeaddrinfo(ub_sock->addr);
|
||||||
free(ub_sock);
|
free(ub_sock);
|
||||||
if(noip6) {
|
if(noip6) {
|
||||||
|
|
@ -1330,6 +1336,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
verbose(VERB_ALGO, "setup TCP for SSL service");
|
verbose(VERB_ALGO, "setup TCP for SSL service");
|
||||||
if(!port_insert(list, s, port_type, is_pp2, ub_sock)) {
|
if(!port_insert(list, s, port_type, is_pp2, ub_sock)) {
|
||||||
sock_close(s);
|
sock_close(s);
|
||||||
|
if(ub_sock->addr)
|
||||||
freeaddrinfo(ub_sock->addr);
|
freeaddrinfo(ub_sock->addr);
|
||||||
free(ub_sock);
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1908,6 +1915,7 @@ void listening_ports_free(struct listen_port* list)
|
||||||
}
|
}
|
||||||
/* rc_ports don't have ub_socket */
|
/* rc_ports don't have ub_socket */
|
||||||
if(list->socket) {
|
if(list->socket) {
|
||||||
|
if(list->socket->addr)
|
||||||
freeaddrinfo(list->socket->addr);
|
freeaddrinfo(list->socket->addr);
|
||||||
free(list->socket);
|
free(list->socket);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue