nft: fix leaks in nft_xtables_config_load
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
diff --git a/iptables/nft.c b/iptables/nft.c
index 1c7c75e..a67f875 100644
--- a/iptables/nft.c
+++ b/iptables/nft.c
@@ -2816,6 +2816,8 @@
"table `%s' cannot be create, reason `%s'. Exitting\n",
(char *)nft_table_attr_get(table, NFT_TABLE_ATTR_NAME),
strerror(errno));
+ nft_table_list_iter_destroy(titer);
+ nft_table_list_free(table_list);
return -1;
}
continue;
@@ -2823,6 +2825,8 @@
xtables_config_perror(flags, "table `%s' has been created\n",
(char *)nft_table_attr_get(table, NFT_TABLE_ATTR_NAME));
}
+ nft_table_list_iter_destroy(titer);
+ nft_table_list_free(table_list);
/* Stage 2) create chains */
citer = nft_chain_list_iter_create(chain_list);
@@ -2838,6 +2842,8 @@
"chain `%s' cannot be create, reason `%s'. Exitting\n",
(char *)nft_chain_attr_get(chain, NFT_CHAIN_ATTR_NAME),
strerror(errno));
+ nft_chain_list_iter_destroy(citer);
+ nft_chain_list_free(chain_list);
return -1;
}
continue;
@@ -2848,5 +2854,8 @@
(char *)nft_chain_attr_get(chain, NFT_CHAIN_ATTR_NAME),
(char *)nft_chain_attr_get(chain, NFT_CHAIN_ATTR_TABLE));
}
+ nft_chain_list_iter_destroy(citer);
+ nft_chain_list_free(chain_list);
+
return 0;
}