diff options
| author | Chirag Shah <chirag@cumulusnetworks.com> | 2019-04-09 12:30:15 -0700 |
|---|---|---|
| committer | Chirag Shah <chirag@cumulusnetworks.com> | 2019-04-09 12:30:15 -0700 |
| commit | 8a88f81550def495fbcb9d59324438ebf08d414d (patch) | |
| tree | 76e4ab1ff754855928f092ca83d7306dbe240b31 /zebra/zebra_router.c | |
| parent | c8d8450442fbc9967a2e9cbbb5a963dc2ff3de00 (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.c | 4 |
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); |
