• Jozsef Kadlecsik's avatar
    netfilter: ipset: Rework long task execution when adding/deleting entries · 5e29dc36
    Jozsef Kadlecsik authored
    When adding/deleting large number of elements in one step in ipset, it can
    take a reasonable amount of time and can result in soft lockup errors. The
    patch 5f7b51bf ("netfilter: ipset: Limit the maximal range of
    consecutive elements to add/delete") tried to fix it by limiting the max
    elements to process at all. However it was not enough, it is still possible
    that we get hung tasks. Lowering the limit is not reasonable, so the
    approach in this patch is as follows: rely on the method used at resizing
    sets and save the state when we reach a smaller internal batch limit,
    unlock/lock and proceed from the saved state. Thus we can avoid long
    continuous tasks and at the same time removed the limit to add/delete large
    number of elements in one step.
    
    The nfnl mutex is held during the whole operation which prevents one to
    issue other ipset commands in parallel.
    
    Fixes: 5f7b51bf ("netfilter: ipset: Limit the maximal range of consecutive elements to add/delete")
    Reported-by: syzbot+9204e7399656300bf271@syzkaller.appspotmail.com
    Signed-off-by: default avatarJozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    5e29dc36
ip_set_hash_ipportnet.c 14.8 KB