Skip to content

Commit f75975b

Browse files
authored
Merge pull request #20078 from c-po/backport-19879
bgpd: Crash due to usage of freed up evpn_overlay attr (backport #19879) with fixed conflicts
2 parents cdf1852 + b088ee5 commit f75975b

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

bgpd/bgp_attr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,7 @@ void evpn_overlay_free(struct bgp_route_evpn *bre)
549549
XFREE(MTYPE_BGP_EVPN_OVERLAY, bre);
550550
}
551551

552-
static struct bgp_route_evpn *evpn_overlay_intern(struct bgp_route_evpn *bre)
552+
struct bgp_route_evpn *evpn_overlay_intern(struct bgp_route_evpn *bre)
553553
{
554554
struct bgp_route_evpn *find;
555555

bgpd/bgp_attr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -660,5 +660,6 @@ bgp_attr_set_vnc_subtlvs(struct attr *attr,
660660

661661
extern bool route_matches_soo(struct bgp_path_info *pi, struct ecommunity *soo);
662662
extern void evpn_overlay_free(struct bgp_route_evpn *bre);
663+
extern struct bgp_route_evpn *evpn_overlay_intern(struct bgp_route_evpn *bre);
663664

664665
#endif /* _QUAGGA_BGP_ATTR_H */

bgpd/bgp_route.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4641,10 +4641,12 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
46414641
* attr->evpn_overlay, so that, this can be stored in adj_in.
46424642
*/
46434643
if (evpn) {
4644-
if (afi == AFI_L2VPN)
4644+
if (afi == AFI_L2VPN) {
4645+
evpn = evpn_overlay_intern(evpn);
46454646
bgp_attr_set_evpn_overlay(attr, evpn);
4646-
else
4647+
} else {
46474648
evpn_overlay_free(evpn);
4649+
}
46484650
}
46494651
bgp_adj_in_set(dest, peer, attr, addpath_id, &bgp_labels);
46504652
}

0 commit comments

Comments
 (0)