From 6fff24aaf84a4349faf04dc39bd1889f42ad4609 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Mon, 10 Sep 2018 19:14:07 -0700 Subject: [PATCH] FIB: recusrive paths must lock the table to prevent its deletion Change-Id: I958bf057be751dc7b3a0d93080021b3addc405b7 Signed-off-by: Neale Ranns --- src/vnet/fib/fib_path.c | 6 ++++++ src/vnet/fib/fib_table.c | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/vnet/fib/fib_path.c b/src/vnet/fib/fib_path.c index 226de2a1ddd..88dddbcaeea 100644 --- a/src/vnet/fib/fib_path.c +++ b/src/vnet/fib/fib_path.c @@ -879,6 +879,9 @@ fib_path_unresolve (fib_path_t *path) fib_table_entry_special_remove(path->recursive.fp_tbl_id, fib_entry_get_prefix(path->fp_via_fib), FIB_SOURCE_RR); + fib_table_unlock(path->recursive.fp_tbl_id, + dpo_proto_to_fib(path->fp_nh_proto), + FIB_SOURCE_RR); path->fp_via_fib = FIB_NODE_INDEX_INVALID; } break; @@ -1897,6 +1900,9 @@ fib_path_resolve (fib_node_index_t path_index) fib_prefix_from_ip46_addr(&path->recursive.fp_nh.fp_ip, &pfx); } + fib_table_lock(path->recursive.fp_tbl_id, + dpo_proto_to_fib(path->fp_nh_proto), + FIB_SOURCE_RR); fei = fib_table_entry_special_add(path->recursive.fp_tbl_id, &pfx, FIB_SOURCE_RR, diff --git a/src/vnet/fib/fib_table.c b/src/vnet/fib/fib_table.c index d8e8d63b9ae..47f2011b7aa 100644 --- a/src/vnet/fib/fib_table.c +++ b/src/vnet/fib/fib_table.c @@ -1269,6 +1269,9 @@ fib_table_lock (u32 fib_index, fib_table_t *fib_table; fib_table = fib_table_get(fib_index, proto); + + ASSERT(fib_table->ft_locks[source] < (0xffff - 1)); + fib_table->ft_locks[source]++; fib_table->ft_locks[FIB_TABLE_TOTAL_LOCKS]++; } -- 2.16.6