From ea3c6c1a15ce9b93f583f96919c70f7a2fd34e98 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Mon, 28 Dec 2020 21:19:27 +0100 Subject: [PATCH] Static: Fix handling of 'net' attribute in per-route filters 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 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/proto/static/static.c b/proto/static/static.c index 941e916f..31b7f5d6 100644 --- a/proto/static/static.c +++ b/proto/static/static.c @@ -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;