lkml.org 
[lkml]   [2018]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.18 28/52] netfilter: restart search if moved to other chain
    Date
    3.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Florian Westphal <fw@strlen.de>

    commit 95a8d19f28e6b29377a880c6264391a62e07fccc upstream.

    In case nf_conntrack_tuple_taken did not find a conflicting entry
    check that all entries in this hash slot were tested and restart
    in case an entry was moved to another chain.

    Reported-by: Eric Dumazet <edumazet@google.com>
    Fixes: ea781f197d6a ("netfilter: nf_conntrack: use SLAB_DESTROY_BY_RCU and get rid of call_rcu()")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Acked-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Acked-by: Michal Kubecek <mkubecek@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    net/netfilter/nf_conntrack_core.c | 7 +++++++
    1 file changed, 7 insertions(+)

    --- a/net/netfilter/nf_conntrack_core.c
    +++ b/net/netfilter/nf_conntrack_core.c
    @@ -695,6 +695,7 @@ nf_conntrack_tuple_taken(const struct nf
    * least once for the stats anyway.
    */
    rcu_read_lock_bh();
    + begin:
    hlist_nulls_for_each_entry_rcu(h, n, &net->ct.hash[hash], hnnode) {
    ct = nf_ct_tuplehash_to_ctrack(h);
    if (ct != ignored_conntrack &&
    @@ -706,6 +707,12 @@ nf_conntrack_tuple_taken(const struct nf
    }
    NF_CT_STAT_INC(net, searched);
    }
    +
    + if (get_nulls_value(n) != hash) {
    + NF_CT_STAT_INC(net, search_restart);
    + goto begin;
    + }
    +
    rcu_read_unlock_bh();

    return 0;

    \
     
     \ /
      Last update: 2018-01-29 22:15    [W:5.190 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site