]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Fix crash when showing filtered routes
authorPascal Mathis <mail@pascalmathis.com>
Thu, 14 Jun 2018 17:40:36 +0000 (19:40 +0200)
committerPascal Mathis <mail@pascalmathis.com>
Tue, 19 Jun 2018 16:19:13 +0000 (18:19 +0200)
This commit fixes the issue mentioned in #2419, which is caused by a
double-free. The problem of the current implementation is that
*bgp_input_modifier* already frees the passed attributes under specific
circumstances, which can then lead to a double-free as *bgp_attr_undup*
does not check if the attributes are set to NULL.

As it is not transparent to the function caller if the attributes get
freed or not and the similar function *bgp_output_modifier* also does
not flush the passed attributes, the line has been removed altogether.

All callers of *bgp_input_modifier* already deal by themself with
freeing/flushing/unduping BGP attributes, so it is safe to remove.

Signed-off-by: Pascal Mathis <mail@pascalmathis.com>
(cherry picked from commit 1f2263be24b7b5be3fa0d889bd6605d2d3214501)

bgpd/bgp_route.c

index e7ae9bdd622fb5b09fb19f1e2739e75c365f9e05..dfca3231b7b59307a734c86c99ee39fe251c2592 100644 (file)
@@ -1169,12 +1169,8 @@ static int bgp_input_modifier(struct peer *peer, struct prefix *p,
 
                peer->rmap_type = 0;
 
-               if (ret == RMAP_DENYMATCH) {
-                       /* Free newly generated AS path and community by
-                        * route-map. */
-                       bgp_attr_flush(attr);
+               if (ret == RMAP_DENYMATCH)
                        return RMAP_DENY;
-               }
        }
        return RMAP_PERMIT;
 }