Re: nlif_open() - nlif_close() - memory leak?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

On Thursday, 2008 May 22 at 12:52:41 +0500, Anton wrote:
> On Thursday 22 May 2008 12:43, Eric Leblond wrote:
> > Hello,
> >
> > On Thursday, 2008 May 22 at 10:53:40 +0500, Anton wrote:
> > You should not call nlif_open, nlif_close at each
> > resolution:
> 
> Yes, this is obvious, it was just a quick test.
> 
> >
> > Information about nlif usage:
> > http://software.inl.fr/trac/wiki/articles/using_nlif
> 
> Great, thanks!
> 
> >
> > Anyway, I will investigate to see what's going on. We
> > definitely should not have a memory leak.

The attached patch should fix the memory leak issue. Could you test it ?

BR,
-- 
Eric Leblond
INL: http://www.inl.fr/
NuFW: http://www.nufw.org/
diff --git a/src/iftable.c b/src/iftable.c
index 7e6172b..a2844fd 100644
--- a/src/iftable.c
+++ b/src/iftable.c
@@ -25,6 +25,8 @@
 
 #define iftb_log(x, ...)
 
+#define SIZE_IFHASH 16
+
 struct ifindex_map {
 	struct ifindex_map *next;
 
@@ -37,7 +39,7 @@ struct ifindex_map {
 };
 
 struct nlif_handle {
-	struct ifindex_map *ifindex_map[16];
+	struct ifindex_map *ifindex_map[SIZE_IFHASH];
 	struct rtnl_handle *rtnl_handle;
 	struct rtnl_handler ifadd_handler;
 	struct rtnl_handler ifdel_handler;
@@ -255,6 +257,19 @@ err:
 	return NULL;
 }
 
+static void free_indexmap(struct ifindex_map **indexmap)
+{
+	struct ifindex_map *im, *ima, **imp;
+	int i;
+
+	for (i = 0; i < SIZE_IFHASH; i++) {
+		for (ima = NULL, imp = &(indexmap[i]); 
+				(im=*imp)!=NULL; imp = &im->next, ima=im) {
+			free(ima);
+		}
+	}
+}
+
 /** Destructor of interface table
  *
  * \param nlif_handle A pointer to a ::nlif_handle created 
@@ -267,6 +282,7 @@ void nlif_close(struct nlif_handle *h)
 	rtnl_handler_unregister(h->rtnl_handle, &h->ifadd_handler);
 	rtnl_handler_unregister(h->rtnl_handle, &h->ifdel_handler);
 	rtnl_close(h->rtnl_handle);
+	free_indexmap(h->ifindex_map);
 	free(h);
 	h = NULL; /* bugtrap */
 }

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux