]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
nft: fix leaks in nft_xtables_config_load
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 12 Jun 2013 09:49:52 +0000 (11:49 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 30 Dec 2013 22:50:32 +0000 (23:50 +0100)
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
iptables/nft.c

index 1c7c75eb5d3d88b29651e093325fe163b774dec0..a67f8754db418426f6e13d0e44fbd93b7e0b02f7 100644 (file)
@@ -2816,6 +2816,8 @@ int nft_xtables_config_load(struct nft_handle *h, const char *filename,
                                        "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 @@ int nft_xtables_config_load(struct nft_handle *h, const char *filename,
                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 @@ int nft_xtables_config_load(struct nft_handle *h, const char *filename,
                                        "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 @@ int nft_xtables_config_load(struct nft_handle *h, const char *filename,
                        (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;
 }