From: David Lamparter Date: Wed, 16 Dec 2015 18:38:23 +0000 (+0100) Subject: lib: fix vrf_bitmap leak in zclient_free() X-Git-Tag: frr-2.0-rc1~215 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=615d4265871653605bb53becc09bd77b48716dbb;p=mirror%2Ffrr.git 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 Signed-off-by: David Lamparter --- diff --git a/lib/zclient.c b/lib/zclient.c index a02cbbe4dd..24d9b589df 100644 --- a/lib/zclient.c +++ b/lib/zclient.c @@ -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