[Babel-users] babeld: memory leak?
Gabriel Kerneis
kerneis at pps.jussieu.fr
Fri Jul 15 12:27:23 UTC 2011
Hi,
On Fri, Jul 15, 2011 at 12:50:30PM +0200, Matthieu Boutier wrote:
> config.c, 718-729:
> we lost all network_confs, but:
Well, not really lost, but linked from the global networks list.
> network.c, 59:
> we catch them, but if we reach line 70, we really lost the network_conf, I
> think, no?
Anyway, this case should never happen when conf != NULL because add_nconf
already takes care of merging network configurations for the same interface
(config.c:488).
But it might happen when conf is NULL, though: when an interface is duplicated
on the command line (babeld.c:350, see below), or when it appears both on the
command line and in the config file or in a -C statement.
> (75 too, but at least an error occurs, and then program will properly end)
When malloc fails, it is probably too late to worry about memory leaks ;-)
> NB: tests of lines 63, 64 are never usefull… why having create it ?
http://en.wikipedia.org/wiki/Defensive_programming
Also notice that line 63 is indeed useful, because of:
> babeld.c:350: vrc = add_network(argv[i], NULL);
To get a really defensive function avoiding space leaks, you could apply the
following patch:
diff -rN -u old-babeld/network.c new-babeld/network.c
--- old-babeld/network.c 2011-07-15 14:20:34.000000000 +0200
+++ new-babeld/network.c 2011-07-15 14:20:35.000000000 +0200
@@ -29,6 +29,7 @@
#include <netinet/in.h>
#include <net/if.h>
#include <arpa/inet.h>
+#include <assert.h>
#include "babeld.h"
#include "util.h"
@@ -66,8 +67,10 @@
}
FOR_ALL_NETS(net) {
- if(strcmp(net->ifname, ifname) == 0)
+ if(strcmp(net->ifname, ifname) == 0) {
+ assert(!conf);
return net;
+ }
}
net = malloc(sizeof(struct network));
It might be overkill, though.
Best,
--
Gabriel
More information about the Babel-users
mailing list