]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: ensure transit ptr is nulled on free
authorQuentin Young <qlyoung@cumulusnetworks.com>
Tue, 26 Nov 2019 19:42:26 +0000 (14:42 -0500)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Thu, 16 Jan 2020 19:36:52 +0000 (14:36 -0500)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
bgpd/bgp_attr.c
bgpd/bgp_attr.h

index 53e6acc4241d0e2a2ad7c16d43c195a1aa9d5f63..d6260a0806a2f6b4c92a19a27a4c87c86befe3bb 100644 (file)
@@ -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);
index f1a871fe430cdd23d5dfc3f0bd08e423e6c97416..0f63c3af846558806cb86e2c2b75319ce3fca5cb 100644 (file)
@@ -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;