From 51f08d20954f7eb5601dc7aca0cfa80d438db107 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 24 Jun 2020 13:42:30 +1000 Subject: [PATCH] Address potential thread issues: Assign and then check node for NULL to address another thread changing radix->head in the meantime. Move 'node != NULL' check into while loop test to silence cppcheck false positive. Fix pointer != NULL style. --- lib/isc/radix.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/isc/radix.c b/lib/isc/radix.c index 72416a61a5..fccad5baae 100644 --- a/lib/isc/radix.c +++ b/lib/isc/radix.c @@ -232,15 +232,16 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target, *target = NULL; - if (radix->head == NULL) { + node = radix->head; + + if (node == NULL) { return (ISC_R_NOTFOUND); } - node = radix->head; addr = isc_prefix_touchar(prefix); bitlen = prefix->bitlen; - while (node->bit < bitlen) { + while (node != NULL && node->bit < bitlen) { if (node->prefix) { stack[cnt++] = node; } @@ -251,13 +252,9 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target, } else { node = node->l; } - - if (node == NULL) { - break; - } } - if (node && node->prefix) { + if (node != NULL && node->prefix) { stack[cnt++] = node; }