]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Static: Fix bug in static route filter expressions
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Fri, 17 Feb 2017 21:54:06 +0000 (22:54 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Fri, 17 Feb 2017 21:54:06 +0000 (22:54 +0100)
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.

proto/static/static.c

index 0c088cd7fdf95068bd6db1c559bec875c8e0327b..849067b91ad4c4f8a1985f12caf11e207f25fd46 100644 (file)
@@ -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);
 }