summaryrefslogtreecommitdiff
path: root/zebra/zebra_router.c
diff options
context:
space:
mode:
authorChirag Shah <chirag@cumulusnetworks.com>2019-04-09 12:30:15 -0700
committerChirag Shah <chirag@cumulusnetworks.com>2019-04-09 12:30:15 -0700
commit8a88f81550def495fbcb9d59324438ebf08d414d (patch)
tree76e4ab1ff754855928f092ca83d7306dbe240b31 /zebra/zebra_router.c
parentc8d8450442fbc9967a2e9cbbb5a963dc2ff3de00 (diff)
zebra: avoid removing node twice from rb_tree
In zebra terminate path, the node was attempted to remove twice from the RB_TREE table. This lead to a crash during zebra shutdown zebra_router_free_table already calls RB_REMOVE to remove a node from rb tree table. siginfo=0x7fffd9134a30, context=<optimized out>) at lib/sigevent.c:249 rbt=<optimized out>, t=<optimized out>) at lib/openbsd-tree.c:226 t=0x56296965ff50 <zebra_router_table_head_RB_INFO>) at lib/openbsd-tree.c:383 rbt=rbt@entry=0x562969669bd0 <zrouter+16>, elm=elm@entry=0x56296afcf810) at lib/openbsd-tree.c:393 (elm=0x56296afcf810, head=0x562969669bd0 <zrouter+16>) at zebra/zebra_router.h:46 Singned-off-by: Chirag Shah <chirag@cumulusnetworks.com>
Diffstat (limited to 'zebra/zebra_router.c')
-rw-r--r--zebra/zebra_router.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/zebra/zebra_router.c b/zebra/zebra_router.c
index 9e09cbca3f..a81752d205 100644
--- a/zebra/zebra_router.c
+++ b/zebra/zebra_router.c
@@ -202,10 +202,8 @@ void zebra_router_terminate(void)
{
struct zebra_router_table *zrt, *tmp;
- RB_FOREACH_SAFE (zrt, zebra_router_table_head, &zrouter.tables, tmp) {
- RB_REMOVE(zebra_router_table_head, &zrouter.tables, zrt);
+ RB_FOREACH_SAFE (zrt, zebra_router_table_head, &zrouter.tables, tmp)
zebra_router_free_table(zrt);
- }
work_queue_free_and_null(&zrouter.ribq);
meta_queue_free(zrouter.mq);