diff options
author | David Lamparter <equinox@opensourcerouting.org> | 2015-12-16 19:38:23 +0100 |
---|---|---|
committer | Paul Jakma <paul.jakma@hpe.com> | 2016-03-08 17:53:22 +0000 |
commit | a3ee120fcf2b2b205e3e15f544eb4090653e7bff (patch) | |
tree | 695c9f4c16934d2621736ef73bed6ee46b58a32c /lib | |
parent | 370b7e59170acf853ca3357c71dd5ab0d85e763c (diff) | |
download | quagga-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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/zclient.c | 10 |
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 |