lkml.org 
[lkml]   [2019]   [Nov]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.3 124/193] netfilter: nf_flow_table: set timeout before insertion into hashes
    Date
    From: Pablo Neira Ayuso <pablo@netfilter.org>

    [ Upstream commit daf61b026f4686250e6afa619e6d7b49edc61df7 ]

    Other garbage collector might remove an entry not fully set up yet.

    [570953.958293] RIP: 0010:memcmp+0x9/0x50
    [...]
    [570953.958567] flow_offload_hash_cmp+0x1e/0x30 [nf_flow_table]
    [570953.958585] flow_offload_lookup+0x8c/0x110 [nf_flow_table]
    [570953.958606] nf_flow_offload_ip_hook+0x135/0xb30 [nf_flow_table]
    [570953.958624] nf_flow_offload_inet_hook+0x35/0x37 [nf_flow_table_inet]
    [570953.958646] nf_hook_slow+0x3c/0xb0
    [570953.958664] __netif_receive_skb_core+0x90f/0xb10
    [570953.958678] ? ip_rcv_finish+0x82/0xa0
    [570953.958692] __netif_receive_skb_one_core+0x3b/0x80
    [570953.958711] __netif_receive_skb+0x18/0x60
    [570953.958727] netif_receive_skb_internal+0x45/0xf0
    [570953.958741] napi_gro_receive+0xcd/0xf0
    [570953.958764] ixgbe_clean_rx_irq+0x432/0xe00 [ixgbe]
    [570953.958782] ixgbe_poll+0x27b/0x700 [ixgbe]
    [570953.958796] net_rx_action+0x284/0x3c0
    [570953.958817] __do_softirq+0xcc/0x27c
    [570953.959464] irq_exit+0xe8/0x100
    [570953.960097] do_IRQ+0x59/0xe0
    [570953.960734] common_interrupt+0xf/0xf

    Fixes: 43c8f131184f ("netfilter: nf_flow_table: fix missing error check for rhashtable_insert_fast")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/netfilter/nf_flow_table_core.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/net/netfilter/nf_flow_table_core.c b/net/netfilter/nf_flow_table_core.c
    index a0b4bf654de2d..4c2f8959de587 100644
    --- a/net/netfilter/nf_flow_table_core.c
    +++ b/net/netfilter/nf_flow_table_core.c
    @@ -201,6 +201,8 @@ int flow_offload_add(struct nf_flowtable *flow_table, struct flow_offload *flow)
    {
    int err;

    + flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT;
    +
    err = rhashtable_insert_fast(&flow_table->rhashtable,
    &flow->tuplehash[0].node,
    nf_flow_offload_rhash_params);
    @@ -217,7 +219,6 @@ int flow_offload_add(struct nf_flowtable *flow_table, struct flow_offload *flow)
    return err;
    }

    - flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT;
    return 0;
    }
    EXPORT_SYMBOL_GPL(flow_offload_add);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-11 20:00    [W:4.509 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site