From d6c8d33fb2253370b11c28a9f4dd16363888e85d Mon Sep 17 00:00:00 2001 From: Vladimir Zhigulin Date: Fri, 4 Jul 2025 10:47:14 +0200 Subject: [PATCH] fib: take barrier on LB pool put Fixes ASAN crash after fib update with multiple workers Type: fix Change-Id: I3d0112b608ffa5b5559311c6d494d27d6c1db511 Signed-off-by: Vladimir Zhigulin --- src/vnet/dpo/load_balance.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/vnet/dpo/load_balance.c b/src/vnet/dpo/load_balance.c index f6f9392a42b..c0f04f0ab99 100644 --- a/src/vnet/dpo/load_balance.c +++ b/src/vnet/dpo/load_balance.c @@ -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 -- 2.16.6