From: George Thessalonikefs Date: Fri, 23 Jul 2021 16:25:06 +0000 (+0200) Subject: - Fix for #411, #439, #469: stream reuse, fix loop in the free X-Git-Tag: release-1.13.2rc1~19^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0c74d6abbaf6d3aee0475bc311e2c27bb2a6a171;p=thirdparty%2Funbound.git - Fix for #411, #439, #469: stream reuse, fix loop in the free pending_tcp list. --- diff --git a/services/outside_network.c b/services/outside_network.c index 023e09420..54fcfdd5c 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1032,8 +1032,12 @@ decommission_pending_tcp(struct outside_network* outnet, struct pending_tcp* pend) { verbose(VERB_CLIENT, "decommission_pending_tcp"); - pend->next_free = outnet->tcp_free; - outnet->tcp_free = pend; + /* A certain code path can lead here twice for the same pending_tcp + * creating a loop in the free pending_tcp list. */ + if(outnet->tcp_free != pend) { + pend->next_free = outnet->tcp_free; + outnet->tcp_free = pend; + } log_assert(outnet->tcp_free->next_free != outnet->tcp_free); if(pend->reuse.node.key) { /* needs unlink from the reuse tree to get deleted */