From ff9c00d2d5fe0d934a3acaaca8e88c61119bbfdf Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Tue, 26 Nov 2019 14:42:26 -0500 Subject: [PATCH] bgpd: ensure transit ptr is nulled on free Signed-off-by: Quentin Young --- bgpd/bgp_attr.c | 15 ++++++++------- bgpd/bgp_attr.h | 3 --- 2 files changed, 8 insertions(+), 10 deletions(-) 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; -- 2.39.5