diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 747090dc3a..c97dbc4fef 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -2917,10 +2917,14 @@ void subgroup_process_announce_selected(struct update_subgroup *subgrp, * in FIB, then it is advertised */ if (advertise) { - if (!bgp_check_withdrawal(bgp, dest)) - bgp_adj_out_set_subgroup( - dest, subgrp, &attr, selected); - else + if (!bgp_check_withdrawal(bgp, dest)) { + struct attr *adv_attr = + bgp_attr_intern(&attr); + + bgp_adj_out_set_subgroup(dest, subgrp, + adv_attr, + selected); + } else bgp_adj_out_unset_subgroup( dest, subgrp, 1, addpath_tx_id); } diff --git a/bgpd/bgp_updgrp_adv.c b/bgpd/bgp_updgrp_adv.c index af8ef751da..de2b3206b7 100644 --- a/bgpd/bgp_updgrp_adv.c +++ b/bgpd/bgp_updgrp_adv.c @@ -715,11 +715,14 @@ void subgroup_announce_table(struct update_subgroup *subgrp, &attr, NULL)) { /* Check if route can be advertised */ if (advertise) { - if (!bgp_check_withdrawal(bgp, dest)) + if (!bgp_check_withdrawal(bgp, dest)) { + struct attr *adv_attr = + bgp_attr_intern(&attr); + bgp_adj_out_set_subgroup( - dest, subgrp, &attr, + dest, subgrp, adv_attr, ri); - else + } else bgp_adj_out_unset_subgroup( dest, subgrp, 1, bgp_addpath_id_for_peer(