summaryrefslogtreecommitdiff
path: root/tools/iptables-test.c
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-10-29 23:43:48 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2010-10-30 00:22:21 +0200
commite6e46384e7459fbcfc84a89930c3ca66fe0a1c5f (patch)
tree3837860b358473332cdcf9ad32fab66e98633911 /tools/iptables-test.c
parent9d448a9efd3906b31689e7050b1452a7643fe804 (diff)
downloadconnman-e6e46384e7459fbcfc84a89930c3ca66fe0a1c5f.tar.gz
connman-e6e46384e7459fbcfc84a89930c3ca66fe0a1c5f.tar.bz2
connman-e6e46384e7459fbcfc84a89930c3ca66fe0a1c5f.zip
iptables-test: Properly clean tables up
Diffstat (limited to 'tools/iptables-test.c')
-rw-r--r--tools/iptables-test.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/tools/iptables-test.c b/tools/iptables-test.c
index f6114b86..a979cba9 100644
--- a/tools/iptables-test.c
+++ b/tools/iptables-test.c
@@ -722,7 +722,17 @@ static int connman_iptables_replace(struct connman_iptables *table,
static void connman_iptables_cleanup(struct connman_iptables *table)
{
+ GList *list;
+ struct connman_iptables_entry *entry;
+
close(table->ipt_sock);
+
+ for (list = table->entries; list; list = list->next) {
+ entry = list->data;
+
+ g_free(entry->entry);
+ }
+
g_free(table->info);
g_free(table->blob_entries);
g_free(table);
@@ -741,7 +751,15 @@ static int connman_iptables_commit(struct connman_iptables *table)
static int add_entry(struct ipt_entry *entry, struct connman_iptables *table)
{
- return connman_add_entry(table, entry, NULL);
+ struct ipt_entry *new_entry;
+
+ new_entry = g_try_malloc0(entry->next_offset);
+ if (new_entry == NULL)
+ return -ENOMEM;
+
+ memcpy(new_entry, entry, entry->next_offset);
+
+ return connman_add_entry(table, new_entry, NULL);
}
static struct connman_iptables *connman_iptables_init(const char *table_name)