diff --git a/doc/Changelog b/doc/Changelog index accfaade9..d8f88f88c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +5 March 2021: Wouter + - Workaround for #439: prevent loops in the reuse rbtree. + 4 March 2021: Wouter - iana portlist update. - Fix spurious errors about "Could not generate request: out of diff --git a/services/outside_network.c b/services/outside_network.c index 18e2c8da9..d2d8c56f5 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -892,6 +892,9 @@ reuse_tcp_remove_tree_list(struct outside_network* outnet, /* delete it from reuse tree */ (void)rbtree_delete(&outnet->tcp_reuse, reuse); reuse->node.key = NULL; + /* defend against loops on broken tree by zeroing the + * rbnode structure */ + memset(&reuse->node, 0, sizeof(reuse->node)); } /* delete from reuse list */ if(reuse->item_on_lru_list) {