summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Mathis <mail@pascalmathis.com>2018-06-14 19:40:36 +0200
committerPascal Mathis <mail@pascalmathis.com>2018-06-15 00:08:46 +0200
commit1f2263be24b7b5be3fa0d889bd6605d2d3214501 (patch)
tree793408ccc23b09e5ae1985382917f02eb7876b82
parentMerge pull request #2426 from pacovn/Coverity_23089_Buffer_not_null_terminated (diff)
downloadfrr-1f2263be24b7b5be3fa0d889bd6605d2d3214501.tar.xz
frr-1f2263be24b7b5be3fa0d889bd6605d2d3214501.zip
bgpd: Fix crash when showing filtered routes
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>
-rw-r--r--bgpd/bgp_route.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 0a15eb504..95e7def8f 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -1185,12 +1185,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;
}