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);  | 
