diff options
author | /C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org> | 2008-01-17 17:16:54 +0000 |
---|---|---|
committer | /C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org> | 2008-01-17 17:16:54 +0000 |
commit | 5c7db5abef470bc6a0f2e3858a5fc75731c9f3bd (patch) | |
tree | 09816bc288f987c2ef33d1594f94824b9a963bf9 /src | |
parent | ab4f7c0abd2d42f20b8675b3bc552a88204ce4ad (diff) | |
download | conntrack-tools-5c7db5abef470bc6a0f2e3858a5fc75731c9f3bd.tar.gz conntrack-tools-5c7db5abef470bc6a0f2e3858a5fc75731c9f3bd.zip |
Max Kellermann <max@duempel.org>:
fix memory leaks in several error output paths
Diffstat (limited to 'src')
-rw-r--r-- | src/mcast.c | 4 | ||||
-rw-r--r-- | src/stats-mode.c | 3 | ||||
-rw-r--r-- | src/sync-mode.c | 3 |
3 files changed, 10 insertions, 0 deletions
diff --git a/src/mcast.c b/src/mcast.c index 185a7e2..9684b61 100644 --- a/src/mcast.c +++ b/src/mcast.c @@ -80,6 +80,8 @@ struct mcast_sock *mcast_server_create(struct mcast_conf *conf) if (ioctl(m->fd, SIOCGIFMTU, &ifr) == -1) { debug("ioctl"); + close(m->fd); + free(m); return NULL; } conf->mtu = ifr.ifr_mtu; @@ -201,6 +203,7 @@ struct mcast_sock *mcast_client_create(struct mcast_conf *conf) if ((m->fd = socket(conf->ipproto, SOCK_DGRAM, 0)) == -1) { debug("mcast_sock_client_create:socket"); + free(m); return NULL; } @@ -224,6 +227,7 @@ struct mcast_sock *mcast_client_create(struct mcast_conf *conf) } if (ret == -1) { + close(m->fd); free(m); m = NULL; } diff --git a/src/stats-mode.c b/src/stats-mode.c index 563e1f6..0c42d95 100644 --- a/src/stats-mode.c +++ b/src/stats-mode.c @@ -41,6 +41,7 @@ static int init_stats(void) STATE_STATS(buffer_log) = buffer_create(CONFIG(stats).buffer_size); if (!STATE_STATS(buffer_log)) { dlog(STATE(log), LOG_ERR, "can't allocate stats buffer"); + free(state.stats); return -1; } @@ -51,6 +52,8 @@ static int init_stats(void) if (!STATE_STATS(cache)) { dlog(STATE(log), LOG_ERR, "can't allocate memory for the " "external cache"); + free(state.stats); + buffer_destroy(STATE_STATS(buffer_log)); return -1; } diff --git a/src/sync-mode.c b/src/sync-mode.c index f2bfc9f..1632019 100644 --- a/src/sync-mode.c +++ b/src/sync-mode.c @@ -180,11 +180,14 @@ static int init_sync(void) STATE_SYNC(mcast_client) = mcast_client_create(&CONFIG(mcast)); if (STATE_SYNC(mcast_client) == NULL) { dlog(STATE(log), LOG_ERR, "can't open client multicast socket"); + mcast_server_destroy(STATE_SYNC(mcast_server)); return -1; } if (mcast_buffered_init(&CONFIG(mcast)) == -1) { dlog(STATE(log), LOG_ERR, "can't init tx buffer!"); + mcast_server_destroy(STATE_SYNC(mcast_server)); + mcast_client_destroy(STATE_SYNC(mcast_client)); return -1; } |