summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2015-12-16 19:38:23 +0100
committerPaul Jakma <paul.jakma@hpe.com>2016-03-08 17:53:22 +0000
commita3ee120fcf2b2b205e3e15f544eb4090653e7bff (patch)
tree695c9f4c16934d2621736ef73bed6ee46b58a32c
parent370b7e59170acf853ca3357c71dd5ab0d85e763c (diff)
downloadquagga-a3ee120fcf2b2b205e3e15f544eb4090653e7bff.tar.bz2
quagga-a3ee120fcf2b2b205e3e15f544eb4090653e7bff.tar.xz
lib: fix vrf_bitmap leak in zclient_free()
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>
-rw-r--r--lib/zclient.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/zclient.c b/lib/zclient.c
index d25c8d44..9d50ebc0 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -112,6 +112,8 @@ zclient_init (struct zclient *zclient, int redist_default)
void
zclient_stop (struct zclient *zclient)
{
+ int i;
+
if (zclient_debug)
zlog_debug ("zclient stopped");
@@ -134,6 +136,14 @@ zclient_stop (struct zclient *zclient)
zclient->sock = -1;
}
zclient->fail = 0;
+
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
+ {
+ vrf_bitmap_free(zclient->redist[i]);
+ zclient->redist[i] = VRF_BITMAP_NULL;
+ }
+ vrf_bitmap_free(zclient->default_information);
+ zclient->default_information = VRF_BITMAP_NULL;
}
void