mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git
synced 2026-04-03 23:38:12 -04:00
netfilter: ipset: Fix data race between add and list header in all hash types
The "ipset list -terse" command is actually a dump operation which may run parallel with "ipset add" commands, which can trigger an internal resizing of the hash type of sets just being dumped. However, dumping just the header part of the set was not protected against underlying resizing. Fix it by protecting the header dumping part as well. Reported-by: syzbot+786c889f046e8b003ca6@syzkaller.appspotmail.com Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org> Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
committed by
Florian Westphal
parent
f311ebe0d6
commit
dff99962ad
@@ -1648,13 +1648,13 @@ dump_last:
|
||||
if (cb->args[IPSET_CB_PROTO] > IPSET_PROTOCOL_MIN &&
|
||||
nla_put_net16(skb, IPSET_ATTR_INDEX, htons(index)))
|
||||
goto nla_put_failure;
|
||||
if (set->variant->uref)
|
||||
set->variant->uref(set, cb, true);
|
||||
ret = set->variant->head(set, skb);
|
||||
if (ret < 0)
|
||||
goto release_refcount;
|
||||
if (dump_flags & IPSET_FLAG_LIST_HEADER)
|
||||
goto next_set;
|
||||
if (set->variant->uref)
|
||||
set->variant->uref(set, cb, true);
|
||||
fallthrough;
|
||||
default:
|
||||
ret = set->variant->list(set, skb, cb);
|
||||
|
||||
Reference in New Issue
Block a user