From: Evan Hunt Date: Thu, 29 Oct 2020 22:42:09 +0000 (-0700) Subject: check return value from uv_tcp_getpeername() when connecting X-Git-Tag: v9.17.7~31^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fcad58ea6b8a2b247e4c894ef3d49778dd07b54;p=thirdparty%2Fbind9.git check return value from uv_tcp_getpeername() when connecting if we can't determine the peer, the connect should fail. --- diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c index 9d5e493f31c..04b1d171bc0 100644 --- a/lib/isc/netmgr/tcp.c +++ b/lib/isc/netmgr/tcp.c @@ -254,6 +254,7 @@ tcp_connect_cb(uv_connect_t *uvreq, int status) { isc_nmsocket_t *sock = uv_handle_get_data((uv_handle_t *)uvreq->handle); struct sockaddr_storage ss; isc_nmhandle_t *handle = NULL; + int r; REQUIRE(VALID_NMSOCK(sock)); REQUIRE(sock->tid == isc_nm_tid()); @@ -274,11 +275,16 @@ tcp_connect_cb(uv_connect_t *uvreq, int status) { return; } + isc__nm_incstats(sock->mgr, sock->statsindex[STATID_CONNECT]); + r = uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss, + &(int){ sizeof(ss) }); + if (r != 0) { + failed_connect_cb(sock, req, isc__nm_uverr2result(status)); + return; + } + atomic_store(&sock->connecting, false); - isc__nm_incstats(sock->mgr, sock->statsindex[STATID_CONNECT]); - uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss, - &(int){ sizeof(ss) }); result = isc_sockaddr_fromsockaddr(&sock->peer, (struct sockaddr *)&ss); RUNTIME_CHECK(result == ISC_R_SUCCESS);