• Florian Westphal's avatar
    netfilter: conntrack: don't call iter for non-confirmed conntracks · b0feacaa
    Florian Westphal authored
    nf_ct_iterate_cleanup_net currently calls iter() callback also for
    conntracks on the unconfirmed list, but this is unsafe.
    
    Acesses to nf_conn are fine, but some users access the extension area
    in the iter() callback, but that does only work reliably for confirmed
    conntracks (ct->ext can be reallocated at any time for unconfirmed
    conntrack).
    
    The seond issue is that there is a short window where a conntrack entry
    is neither on the list nor in the table: To confirm an entry, it is first
    removed from the unconfirmed list, then insert into the table.
    
    Fix this by iterating the unconfirmed list first and marking all entries
    as dying, then wait for rcu grace period.
    
    This makes sure all entries that were about to be confirmed either are
    in the main table, or will be dropped soon.
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    b0feacaa
nf_conntrack_core.c 54.6 KB