From: Quentin Young Date: Tue, 26 Nov 2019 19:42:26 +0000 (-0500) Subject: bgpd: ensure transit ptr is nulled on free X-Git-Tag: frr-7.2.1~1^2~8 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=ff9c00d2d5fe0d934a3acaaca8e88c61119bbfdf;p=mirror%2Ffrr.git bgpd: ensure transit ptr is nulled on free Signed-off-by: Quentin Young --- diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index 53e6acc424..d6260a0806 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -422,14 +422,15 @@ static struct transit *transit_intern(struct transit *transit) return find; } -void transit_unintern(struct transit *transit) +static void transit_unintern(struct transit **transit) { - if (transit->refcnt) - transit->refcnt--; + if ((*transit)->refcnt) + (*transit)->refcnt--; - if (transit->refcnt == 0) { - hash_release(transit_hash, transit); - transit_free(transit); + if ((*transit)->refcnt == 0) { + hash_release(transit_hash, *transit); + transit_free(*transit); + *transit = NULL; } } @@ -859,7 +860,7 @@ void bgp_attr_unintern_sub(struct attr *attr) UNSET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_CLUSTER_LIST)); if (attr->transit) - transit_unintern(attr->transit); + transit_unintern(&attr->transit); if (attr->encap_subtlvs) encap_unintern(&attr->encap_subtlvs, ENCAP_SUBTLV_TYPE); diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h index f1a871fe43..0f63c3af84 100644 --- a/bgpd/bgp_attr.h +++ b/bgpd/bgp_attr.h @@ -293,9 +293,6 @@ extern unsigned long int attr_unknown_count(void); extern int cluster_loop_check(struct cluster_list *, struct in_addr); extern void cluster_unintern(struct cluster_list *); -/* Transit attribute prototypes. */ -void transit_unintern(struct transit *); - /* Below exported for unit-test purposes only */ struct bgp_attr_parser_args { struct peer *peer;