]> git.puffer.fish Git - mirror/frr.git/commitdiff
Revert "bgpd: fix double free in dampening code"
authorIgor Ryzhov <iryzhov@nfware.com>
Mon, 2 Aug 2021 10:01:38 +0000 (13:01 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 3 Aug 2021 18:54:47 +0000 (21:54 +0300)
This reverts commit 96d6b8cc29bf5124ae93433ecfc16b3fd69be5ea.

bgpd/bgp_damp.c

index 21e42ae8202e87f67950a1e01eb808c003127465..2a372c0ba4b528f02a99606c4cef3a19d94dcf20 100644 (file)
@@ -174,9 +174,16 @@ static void bgp_reuse_list_add(struct bgp_damp_info *bdi,
 }
 
 /* Delete BGP dampening information from reuse list.  */
-static void bgp_reuse_list_delete(struct bgp_damp_info *bdi)
+static void bgp_reuse_list_delete(struct bgp_damp_info *bdi,
+                                 struct bgp_damp_config *bdc)
 {
+       struct reuselist *list;
+       struct reuselist_node *rn;
+
+       list = &bdc->reuse_list[bdi->index];
+       rn = bgp_reuselist_find(list, bdi);
        bgp_damp_info_unclaim(bdi);
+       bgp_reuselist_del(list, &rn);
 }
 
 static void bgp_no_reuse_list_add(struct bgp_damp_info *bdi,
@@ -369,7 +376,7 @@ int bgp_damp_withdraw(struct bgp_path_info *path, struct bgp_dest *dest,
        if (CHECK_FLAG(bdi->path->flags, BGP_PATH_DAMPED)) {
                /* If decay rate isn't equal to 0, reinsert brn. */
                if (bdi->penalty != last_penalty) {
-                       bgp_reuse_list_delete(bdi);
+                       bgp_reuse_list_delete(bdi, bdc);
                        bgp_reuse_list_add(bdi, bdc);
                }
                return BGP_DAMP_SUPPRESSED;
@@ -413,7 +420,7 @@ int bgp_damp_update(struct bgp_path_info *path, struct bgp_dest *dest,
        else if (CHECK_FLAG(bdi->path->flags, BGP_PATH_DAMPED)
                 && (bdi->penalty < bdc->reuse_limit)) {
                bgp_path_info_unset_flag(dest, path, BGP_PATH_DAMPED);
-               bgp_reuse_list_delete(bdi);
+               bgp_reuse_list_delete(bdi, bdc);
                bgp_no_reuse_list_add(bdi, bdc);
                bdi->suppress_time = 0;
                status = BGP_DAMP_USED;