From: Ondrej Zajicek (work) Date: Fri, 17 Feb 2017 21:54:06 +0000 (+0100) Subject: Static: Fix bug in static route filter expressions X-Git-Tag: v2.0.0-pre1~4^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=30c734fc73648e4c43af4f45e68ac2de3d7ddea1;p=thirdparty%2Fbird.git Static: Fix bug in static route filter expressions During reconfiguration, old and new filter expressions in static routes are compared using i_same() function. When filter expressions contain function calls, it is necessary that old filter expressions are the second argument in i_same(), as it is internally modified by i_same(). Otherwise pointers to old (and freed) data appear in the config structure. Thanks to Lennert Buytenhek for tracking and reporting the bug. --- diff --git a/proto/static/static.c b/proto/static/static.c index 0c088cd7f..849067b91 100644 --- a/proto/static/static.c +++ b/proto/static/static.c @@ -498,7 +498,8 @@ static_same_dest(struct static_route *x, struct static_route *y) static inline int static_same_rte(struct static_route *x, struct static_route *y) { - return static_same_dest(x, y) && i_same(x->cmds, y->cmds); + /* Note that i_same() requires arguments in (new, old) order */ + return static_same_dest(x, y) && i_same(y->cmds, x->cmds); }