[9.20] fix: dev: Attach/detach to the listening child socket when accepting TLS
When TLS connection (TLSstream) connection was accepted, the children listening socket was not attached to sock->server and thus it could have been freed before all the accepted connections were actually closed. In turn, this would cause us to call isc_tls_free() too soon - causing cascade errors in pending SSL_read_ex() in the accepted connections. Properly attach and detach the children listening socket when accepting and closing the server connections. Closes #4833 Backport of MR !9270 Merge branch 'backport-4833-tlssock-needs-to-attach-to-child-tlslistener-9.20' into 'bind-9.20' See merge request isc-projects/bind9!9273
This commit is contained in:
@@ -916,6 +916,7 @@ tlslisten_acceptcb(isc_nmhandle_t *handle, isc_result_t result, void *cbarg) {
|
||||
tlssock = isc_mempool_get(handle->sock->worker->nmsocket_pool);
|
||||
isc__nmsocket_init(tlssock, handle->sock->worker, isc_nm_tlssocket,
|
||||
&local, NULL);
|
||||
isc__nmsocket_attach(tlslistensock, &tlssock->server);
|
||||
|
||||
/* We need to initialize SSL now to reference SSL_CTX properly */
|
||||
tlsctx = tls_get_listener_tlsctx(tlslistensock, isc_tid());
|
||||
@@ -1174,6 +1175,10 @@ isc__nm_tls_close(isc_nmsocket_t *sock) {
|
||||
isc__nmsocket_detach(&sock->listener);
|
||||
}
|
||||
|
||||
if (sock->server != NULL) {
|
||||
isc__nmsocket_detach(&sock->server);
|
||||
}
|
||||
|
||||
/* Further cleanup performed in isc__nm_tls_cleanup_data() */
|
||||
sock->closed = true;
|
||||
sock->active = false;
|
||||
|
||||
Reference in New Issue
Block a user