mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 04:56:13 +02:00
netfilter: ipset: fix a potential dump-destroy race
When dumping sets in order to create the proper order for restore, the list type of sets dumped last. Therefore internally we run the dumping loop twice: first with all non-list type of sets and skipping the list type ones and then secondly for the list type of sets. Sashiko noticed that there's a potential race between dump and destroy if in the first loop the last set was a list type of set: its pointer remains unreferenced and a concurrent destroy can free it. Fix the issue by resetting the variable holding the pointer. Signed-off-by: Jozsef Kadlecsik <kadlec@netfilter.org> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
5522d65d81
commit
53d7fd878c
|
|
@ -1613,6 +1613,7 @@ ip_set_dump_do(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
((dump_type == DUMP_ALL) ==
|
||||
!!(set->type->features & IPSET_DUMP_LAST))) {
|
||||
write_unlock_bh(&ip_set_ref_lock);
|
||||
set = NULL;
|
||||
continue;
|
||||
}
|
||||
pr_debug("List set: %s\n", set->name);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user