summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2016-11-25 11:51:38 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2016-11-25 11:51:38 +0100
commited1a908e535e4333b358d83b472453a2ad6d3f51 (patch)
tree3ee46e6d922c3e363dad23976fcc2de0a7e19429 /lib
parent261816b0d4f3d4549a4402b95541b82fc7f10a4b (diff)
BGP: Fix memory leak in graceful restart code
Prefix and bucket tables are initialized when entering established state but not explicitly freed when leaving it (that is handled by protocol restart). With graceful restart, BGP may enter and leave established state multiple times without hard protocol restart causing memory leak.
Diffstat (limited to 'lib')
-rw-r--r--lib/hash.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/hash.h b/lib/hash.h
index 4239b1d8..6995bbc8 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -25,6 +25,12 @@
(v).data = mb_allocz(pool, HASH_SIZE(v) * sizeof(* (v).data)); \
})
+#define HASH_FREE(v) \
+ ({ \
+ mb_free((v).data); \
+ (v) = (typeof(v)){ }; \
+ })
+
#define HASH_FIND(v,id,key...) \
({ \
u32 _h = HASH_FN(v, id, key); \