Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93fac10b authored by Liping Zhang's avatar Liping Zhang Committed by Pablo Neira Ayuso
Browse files

netfilter: nfnetlink: use list_for_each_entry_safe to delete all objects



cttimeout and acct objects are deleted from the list while traversing
it, so use list_for_each_entry is unsafe here.

Signed-off-by: default avatarLiping Zhang <liping.zhang@spreadtrum.com>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent 89e1f6d2
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -343,12 +343,12 @@ static int nfnl_acct_del(struct net *net, struct sock *nfnl,
			 struct sk_buff *skb, const struct nlmsghdr *nlh,
			 const struct nlattr * const tb[])
{
	char *acct_name;
	struct nf_acct *cur;
	struct nf_acct *cur, *tmp;
	int ret = -ENOENT;
	char *acct_name;

	if (!tb[NFACCT_NAME]) {
		list_for_each_entry(cur, &net->nfnl_acct_list, head)
		list_for_each_entry_safe(cur, tmp, &net->nfnl_acct_list, head)
			nfnl_acct_try_del(cur);

		return 0;
+3 −2
Original line number Diff line number Diff line
@@ -350,12 +350,13 @@ static int cttimeout_del_timeout(struct net *net, struct sock *ctnl,
				 const struct nlmsghdr *nlh,
				 const struct nlattr * const cda[])
{
	struct ctnl_timeout *cur;
	struct ctnl_timeout *cur, *tmp;
	int ret = -ENOENT;
	char *name;

	if (!cda[CTA_TIMEOUT_NAME]) {
		list_for_each_entry(cur, &net->nfct_timeout_list, head)
		list_for_each_entry_safe(cur, tmp, &net->nfct_timeout_list,
					 head)
			ctnl_timeout_try_del(net, cur);

		return 0;