From: Phil Sutter Date: Mon, 4 May 2020 17:20:52 +0000 (+0200) Subject: nft: Clear all lists in nft_fini() X-Git-Tag: v1.8.5~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=196401937d76f990ad59a4a93cd5a45e91a2b12a;p=thirdparty%2Fiptables.git nft: Clear all lists in nft_fini() Remove and free any pending entries in obj_list and err_list as well. To get by without having to declare list-specific cursors, use generic list_head types and call list_entry() explicitly. Signed-off-by: Phil Sutter --- diff --git a/iptables/nft.c b/iptables/nft.c index 6503259e..addde1b5 100644 --- a/iptables/nft.c +++ b/iptables/nft.c @@ -850,10 +850,16 @@ int nft_init(struct nft_handle *h, int family, const struct builtin_table *t) void nft_fini(struct nft_handle *h) { - struct nft_cmd *cmd, *next; + struct list_head *pos, *n; - list_for_each_entry_safe(cmd, next, &h->cmd_list, head) - nft_cmd_free(cmd); + list_for_each_safe(pos, n, &h->cmd_list) + nft_cmd_free(list_entry(pos, struct nft_cmd, head)); + + list_for_each_safe(pos, n, &h->obj_list) + batch_obj_del(h, list_entry(pos, struct obj_update, head)); + + list_for_each_safe(pos, n, &h->err_list) + mnl_err_list_free(list_entry(pos, struct mnl_err, head)); nft_release_cache(h); mnl_socket_close(h->nl);