]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Static: Fix handling of 'net' attribute in per-route filters
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Mon, 28 Dec 2020 20:19:27 +0000 (21:19 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Mon, 28 Dec 2020 20:19:27 +0000 (21:19 +0100)
We need to define 'net' field temporarily as it may be accessed by
per-route filters.

Thanks to Damian Zaremba for the bugreport.

proto/static/static.c

index 941e916f8a3f3b9d610184ee23442189d8f753ad..31b7f5d609528d1e35c743b81abb3867df3deaeb 100644 (file)
@@ -106,8 +106,19 @@ static_announce_rte(struct static_proto *p, struct static_route *r)
   e->pflags = 0;
 
   if (r->cmds)
+  {
+    /* Create a temporary table node */
+    e->net = alloca(sizeof(net) + r->net->length);
+    memset(e->net, 0, sizeof(net) + r->net->length);
+    net_copy(e->net->n.addr, r->net);
+
+    /* Evaluate the filter */
     f_eval_rte(r->cmds, &e, static_lp);
 
+    /* Remove the temporary node */
+    e->net = NULL;
+  }
+
   rte_update2(p->p.main_channel, r->net, e, a->src);
   r->state = SRS_CLEAN;