summaryrefslogtreecommitdiff
path: root/src/iptables.c
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2013-03-06 16:08:51 +0100
committerPatrik Flykt <patrik.flykt@linux.intel.com>2013-03-07 10:07:09 +0200
commita235ce6ae6276cf69932b4f5f9994617f08baa1f (patch)
treee0a446a5d39a8e71badf5b8e883db5637a2db0f4 /src/iptables.c
parent4a3961caed734cf6aa1a445b2ae2388dcda9ff17 (diff)
downloadconnman-a235ce6ae6276cf69932b4f5f9994617f08baa1f.tar.gz
connman-a235ce6ae6276cf69932b4f5f9994617f08baa1f.tar.bz2
connman-a235ce6ae6276cf69932b4f5f9994617f08baa1f.zip
iptables: Do not flush in the wrong order
Diffstat (limited to 'src/iptables.c')
-rw-r--r--src/iptables.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/iptables.c b/src/iptables.c
index 9e56d0bb..3ae84178 100644
--- a/src/iptables.c
+++ b/src/iptables.c
@@ -2310,6 +2310,14 @@ void flush_table(const char *name)
table->blob_entries->size,
flush_table_cb, &chains);
+
+ /*
+ * The offset update code is fragile and it works
+ * only safe if we remove elements and move forwards
+ * in the table.
+ */
+ chains = g_slist_reverse(chains);
+
for (list = chains; list != NULL; list = list->next) {
char *chain = list->data;