fib: take barrier on LB pool put 72/43372/2
authorVladimir Zhigulin <[email protected]>
Fri, 4 Jul 2025 08:47:14 +0000 (10:47 +0200)
committerNeale Ranns <[email protected]>
Mon, 7 Jul 2025 23:07:16 +0000 (23:07 +0000)
Fixes ASAN crash after fib update with multiple
workers

Type: fix

Change-Id: I3d0112b608ffa5b5559311c6d494d27d6c1db511
Signed-off-by: Vladimir Zhigulin <[email protected]>
src/vnet/dpo/load_balance.c

index f6f9392..c0f04f0 100644 (file)
@@ -894,6 +894,7 @@ load_balance_destroy (load_balance_t *lb)
 {
     dpo_id_t *buckets;
     int i;
+    u8 need_barrier_sync;
 
     buckets = load_balance_get_buckets(lb);
 
@@ -911,7 +912,14 @@ load_balance_destroy (load_balance_t *lb)
     fib_urpf_list_unlock(lb->lb_urpf);
     load_balance_map_unlock(lb->lb_map);
 
+    need_barrier_sync = pool_put_will_expand (load_balance_pool, lb);
+    if (PREDICT_FALSE (need_barrier_sync))
+       vlib_worker_thread_barrier_sync (vlib_get_main());
+
     pool_put(load_balance_pool, lb);
+
+    if (PREDICT_FALSE (need_barrier_sync))
+       vlib_worker_thread_barrier_release (vlib_get_main());
 }
 
 static void