]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: fix vrf_bitmap leak in zclient_free()
authorDavid Lamparter <equinox@opensourcerouting.org>
Wed, 16 Dec 2015 18:38:23 +0000 (19:38 +0100)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 28 Sep 2016 19:41:06 +0000 (15:41 -0400)
zclient_stop(), which is used as antagonist to zclient_init(), needs to
undo the vrf_bitmap allocation.  Otherwise zclient_init() will leak the
allocated memory, for example when zclient_reset() is used.

Reported-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/zclient.c

index a02cbbe4ddf7e376278a182f039bc76463508f2f..24d9b589df01a422269380f157c7148ea8a83072 100644 (file)
@@ -140,6 +140,9 @@ redist_del_instance (struct redist_proto *red, u_short instance)
 void
 zclient_stop (struct zclient *zclient)
 {
+  afi_t afi;
+  int i;
+
   if (zclient_debug)
     zlog_debug ("zclient stopped");
 
@@ -162,6 +165,15 @@ zclient_stop (struct zclient *zclient)
       zclient->sock = -1;
     }
   zclient->fail = 0;
+
+  for (afi = AFI_IP; afi < AFI_MAX; afi++)
+    for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
+      {
+       vrf_bitmap_free(zclient->redist[afi][i]);
+       zclient->redist[afi][i] = VRF_BITMAP_NULL;
+      }
+  vrf_bitmap_free(zclient->default_information);
+  zclient->default_information = VRF_BITMAP_NULL;
 }
 
 void