]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Nest: fixed a race-condition between import and export
authorMaria Matejka <mq@ucw.cz>
Tue, 10 Dec 2024 09:52:52 +0000 (10:52 +0100)
committerMaria Matejka <mq@ucw.cz>
Tue, 10 Dec 2024 09:59:30 +0000 (10:59 +0100)
There was a leaking stack pointer to the global memory.
Fixed by making that temporary structure thread local static.

nest/rt-table.c

index e2497311228084e10af73c736fa330e2b0583bb8..cd37d94780c5e2be4d74fb8180594e6826ebbc8a 100644 (file)
@@ -1964,10 +1964,8 @@ rte_recalculate(struct rtable_private *table, struct rt_import_hook *c, struct n
     }
 
   /* We need to add a spinlock sentinel to the beginning */
-  struct rte_storage local_sentinel = {
-    .flags = REF_OBSOLETE,
-    .next = old_best_stored,
-  };
+  _Thread_local static struct rte_storage local_sentinel = { .flags = REF_OBSOLETE, };
+  atomic_store_explicit(&local_sentinel.next, old_best_stored, memory_order_release);
   atomic_store_explicit(&net->routes, &local_sentinel, memory_order_release);
 
   /* Mark also the old route as obsolete. */