mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
Fix leak of socket mem on failure and fix if tcp has to wait we
do not know the interface at the time. Later when it knows the interface we do not have 'sq' with the zone name.
This commit is contained in:
parent
2baa748bc7
commit
af96ff157e
3 changed files with 11 additions and 4 deletions
|
|
@ -347,7 +347,7 @@ dt_msg_fill_net(struct dt_msg *dm,
|
||||||
* This block is to fill second set of fields in DNSTAP-message defined as request_/response_ names.
|
* This block is to fill second set of fields in DNSTAP-message defined as request_/response_ names.
|
||||||
* Additional responsive structure is: struct sockaddr_storage *rs
|
* Additional responsive structure is: struct sockaddr_storage *rs
|
||||||
*/
|
*/
|
||||||
if (rs->ss_family == AF_INET6) {
|
if (rs && rs->ss_family == AF_INET6) {
|
||||||
struct sockaddr_in6 *r = (struct sockaddr_in6 *) rs;
|
struct sockaddr_in6 *r = (struct sockaddr_in6 *) rs;
|
||||||
|
|
||||||
/* addr: query_address or response_address */
|
/* addr: query_address or response_address */
|
||||||
|
|
@ -358,7 +358,7 @@ dt_msg_fill_net(struct dt_msg *dm,
|
||||||
/* port: query_port or response_port */
|
/* port: query_port or response_port */
|
||||||
*rport = ntohs(r->sin6_port);
|
*rport = ntohs(r->sin6_port);
|
||||||
*has_rport = 1;
|
*has_rport = 1;
|
||||||
} else if (rs->ss_family == AF_INET) {
|
} else if (rs && rs->ss_family == AF_INET) {
|
||||||
struct sockaddr_in *r = (struct sockaddr_in *) rs;
|
struct sockaddr_in *r = (struct sockaddr_in *) rs;
|
||||||
|
|
||||||
/* addr: query_address or response_address */
|
/* addr: query_address or response_address */
|
||||||
|
|
|
||||||
|
|
@ -1177,6 +1177,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) {
|
||||||
|
free(ub_sock);
|
||||||
if(noip6) {
|
if(noip6) {
|
||||||
log_warn("IPv6 protocol not available");
|
log_warn("IPv6 protocol not available");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -1186,11 +1187,13 @@ 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);
|
||||||
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if(!port_insert(list, s,
|
if(!port_insert(list, s,
|
||||||
is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil, ub_sock)) {
|
is_dnscrypt?listen_type_udpancil_dnscrypt:listen_type_udpancil, ub_sock)) {
|
||||||
sock_close(s);
|
sock_close(s);
|
||||||
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if(do_udp) {
|
} else if(do_udp) {
|
||||||
|
|
@ -1201,6 +1204,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) {
|
||||||
|
free(ub_sock);
|
||||||
if(noip6) {
|
if(noip6) {
|
||||||
log_warn("IPv6 protocol not available");
|
log_warn("IPv6 protocol not available");
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -1210,6 +1214,7 @@ ports_create_if(const char* ifname, int do_auto, int do_udp, int do_tcp,
|
||||||
if(!port_insert(list, s,
|
if(!port_insert(list, s,
|
||||||
is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp, ub_sock)) {
|
is_dnscrypt?listen_type_udp_dnscrypt:listen_type_udp, ub_sock)) {
|
||||||
sock_close(s);
|
sock_close(s);
|
||||||
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1231,6 +1236,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) {
|
||||||
|
free(ub_sock);
|
||||||
if(noip6) {
|
if(noip6) {
|
||||||
/*log_warn("IPv6 protocol not available");*/
|
/*log_warn("IPv6 protocol not available");*/
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -1241,6 +1247,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, ub_sock)) {
|
if(!port_insert(list, s, port_type, ub_sock)) {
|
||||||
sock_close(s);
|
sock_close(s);
|
||||||
|
free(ub_sock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2215,8 +2215,8 @@ pending_tcp_query(struct serviced_query* sq, sldns_buffer* packet,
|
||||||
(sq->outnet->dtenv->log_resolver_query_messages ||
|
(sq->outnet->dtenv->log_resolver_query_messages ||
|
||||||
sq->outnet->dtenv->log_forwarder_query_messages))
|
sq->outnet->dtenv->log_forwarder_query_messages))
|
||||||
dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr,
|
dt_msg_send_outside_query(sq->outnet->dtenv, &sq->addr,
|
||||||
&pend->pi->addr, comm_tcp, sq->zone, sq->zonelen,
|
(pend?&pend->pi->addr:NULL), comm_tcp, sq->zone,
|
||||||
packet);
|
sq->zonelen, packet);
|
||||||
#endif
|
#endif
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue