lkml.org 
[lkml]   [2021]   [Jul]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 116/156] netfilter: ctnetlink: suspicious RCU usage in ctnetlink_dump_helpinfo
    Date
    From: Vasily Averin <vvs@virtuozzo.com>

    commit c23a9fd209bc6f8c1fa6ee303fdf037d784a1627 upstream.

    Two patches listed below removed ctnetlink_dump_helpinfo call from under
    rcu_read_lock. Now its rcu_dereference generates following warning:
    =============================
    WARNING: suspicious RCU usage
    5.13.0+ #5 Not tainted
    -----------------------------
    net/netfilter/nf_conntrack_netlink.c:221 suspicious rcu_dereference_check() usage!

    other info that might help us debug this:
    rcu_scheduler_active = 2, debug_locks = 1
    stack backtrace:
    CPU: 1 PID: 2251 Comm: conntrack Not tainted 5.13.0+ #5
    Call Trace:
    dump_stack+0x7f/0xa1
    ctnetlink_dump_helpinfo+0x134/0x150 [nf_conntrack_netlink]
    ctnetlink_fill_info+0x2c2/0x390 [nf_conntrack_netlink]
    ctnetlink_dump_table+0x13f/0x370 [nf_conntrack_netlink]
    netlink_dump+0x10c/0x370
    __netlink_dump_start+0x1a7/0x260
    ctnetlink_get_conntrack+0x1e5/0x250 [nf_conntrack_netlink]
    nfnetlink_rcv_msg+0x613/0x993 [nfnetlink]
    netlink_rcv_skb+0x50/0x100
    nfnetlink_rcv+0x55/0x120 [nfnetlink]
    netlink_unicast+0x181/0x260
    netlink_sendmsg+0x23f/0x460
    sock_sendmsg+0x5b/0x60
    __sys_sendto+0xf1/0x160
    __x64_sys_sendto+0x24/0x30
    do_syscall_64+0x36/0x70
    entry_SYSCALL_64_after_hwframe+0x44/0xae

    Fixes: 49ca022bccc5 ("netfilter: ctnetlink: don't dump ct extensions of unconfirmed conntracks")
    Fixes: 0b35f6031a00 ("netfilter: Remove duplicated rcu_read_lock.")
    Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/netfilter/nf_conntrack_netlink.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/net/netfilter/nf_conntrack_netlink.c
    +++ b/net/netfilter/nf_conntrack_netlink.c
    @@ -218,6 +218,7 @@ static int ctnetlink_dump_helpinfo(struc
    if (!help)
    return 0;

    + rcu_read_lock();
    helper = rcu_dereference(help->helper);
    if (!helper)
    goto out;
    @@ -233,9 +234,11 @@ static int ctnetlink_dump_helpinfo(struc

    nla_nest_end(skb, nest_helper);
    out:
    + rcu_read_unlock();
    return 0;

    nla_put_failure:
    + rcu_read_unlock();
    return -1;
    }


    \
     
     \ /
      Last update: 2021-07-22 19:35    [W:4.128 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site