]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
isc_nm_listentcp: treat socket failures gracefully
authorMark Andrews <marka@isc.org>
Tue, 17 Jan 2023 06:47:32 +0000 (17:47 +1100)
committerMark Andrews <marka@isc.org>
Fri, 20 Jan 2023 00:05:24 +0000 (11:05 +1100)
The old code didn't handle race conditions and errors on systems
with non load balancing sockets gracefully.  Look for an error on
any child socket and if found close all the child sockets and return
an error.

lib/isc/netmgr/tcp.c

index d0ce958278fc968cec51aef1e430c7f795c9c015..ab2651522af444f32ffc7edf0fd3f9ad0d31b1bb 100644 (file)
@@ -431,8 +431,16 @@ isc_nm_listentcp(isc_nm_t *mgr, uint32_t workers, isc_sockaddr_t *iface,
                isc__nm_closesocket(fd);
        }
 
+       /*
+        * If any of the child sockets have failed then isc_nm_listentcp
+        * fails.
+        */
        for (size_t i = 1; i < sock->nchildren; i++) {
-               INSIST(result == sock->children[i].result);
+               if (result == ISC_R_SUCCESS &&
+                   sock->children[i].result != ISC_R_SUCCESS)
+               {
+                       result = sock->children[i].result;
+               }
        }
 
        atomic_store(&sock->active, true);