2018-11-26 10:43:44

by Pan Bian

[permalink] [raw]
Subject: [PATCH] netfilter: ipset: do not call ipset_nest_end after nla_nest_cancel

In the error handling block, nla_nest_cancel(skb, atd) is called to
cancel the nest operation. But then, ipset_nest_end(skb, atd) is
unexpected called to end the nest operation. This patch calls the
ipset_nest_end only on the branch that nla_nest_cancel is
not called.

Fixes: 45040978c89("netfilter: ipset: Fix set:list type crash when
flush/dump set in parallel")

Signed-off-by: Pan Bian <[email protected]>
---
net/netfilter/ipset/ip_set_list_set.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
index 4eef55d..8da228d 100644
--- a/net/netfilter/ipset/ip_set_list_set.c
+++ b/net/netfilter/ipset/ip_set_list_set.c
@@ -531,8 +531,8 @@ list_set_list(const struct ip_set *set,
ret = -EMSGSIZE;
} else {
cb->args[IPSET_CB_ARG0] = i;
+ ipset_nest_end(skb, atd);
}
- ipset_nest_end(skb, atd);
out:
rcu_read_unlock();
return ret;
--
2.7.4




2018-12-01 16:50:42

by Jozsef Kadlecsik

[permalink] [raw]
Subject: Re: [PATCH] netfilter: ipset: do not call ipset_nest_end after nla_nest_cancel

Hi,

On Mon, 26 Nov 2018, Pan Bian wrote:

> In the error handling block, nla_nest_cancel(skb, atd) is called to
> cancel the nest operation. But then, ipset_nest_end(skb, atd) is
> unexpected called to end the nest operation. This patch calls the
> ipset_nest_end only on the branch that nla_nest_cancel is
> not called.
>
> Fixes: 45040978c89("netfilter: ipset: Fix set:list type crash when
> flush/dump set in parallel")

Good catch, thank you. Patch is applied in ipset git tree.

Best regards,
Jozsef

> Signed-off-by: Pan Bian <[email protected]>
> ---
> net/netfilter/ipset/ip_set_list_set.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/netfilter/ipset/ip_set_list_set.c b/net/netfilter/ipset/ip_set_list_set.c
> index 4eef55d..8da228d 100644
> --- a/net/netfilter/ipset/ip_set_list_set.c
> +++ b/net/netfilter/ipset/ip_set_list_set.c
> @@ -531,8 +531,8 @@ list_set_list(const struct ip_set *set,
> ret = -EMSGSIZE;
> } else {
> cb->args[IPSET_CB_ARG0] = i;
> + ipset_nest_end(skb, atd);
> }
> - ipset_nest_end(skb, atd);
> out:
> rcu_read_unlock();
> return ret;
> --
> 2.7.4
>
>
>

-
E-mail : [email protected], [email protected]
PGP key : http://www.kfki.hu/~kadlec/pgp_public_key.txt
Address : Wigner Research Centre for Physics, Hungarian Academy of Sciences
H-1525 Budapest 114, POB. 49, Hungary