lkml.org 
[lkml]   [2016]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.2.y-ckt 232/273] ipv6: fix a lockdep splat
    Date
    4.2.8-ckt5 -stable review patch.  If anyone has any objections, please let me know.

    ---8<------------------------------------------------------------

    From: Eric Dumazet <edumazet@google.com>

    [ Upstream commit 44c3d0c1c0a880354e9de5d94175742e2c7c9683 ]

    Silence lockdep false positive about rcu_dereference() being
    used in the wrong context.

    First one should use rcu_dereference_protected() as we own the spinlock.

    Second one should be a normal assignation, as no barrier is needed.

    Fixes: 18367681a10bd ("ipv6 flowlabel: Convert np->ipv6_fl_list to RCU.")
    Reported-by: Dave Jones <davej@codemonkey.org.uk>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    net/ipv6/ip6_flowlabel.c | 5 +++--
    1 file changed, 3 insertions(+), 2 deletions(-)

    diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c
    index 1f9ebe3..dc2db4f 100644
    --- a/net/ipv6/ip6_flowlabel.c
    +++ b/net/ipv6/ip6_flowlabel.c
    @@ -540,12 +540,13 @@ int ipv6_flowlabel_opt(struct sock *sk, char __user *optval, int optlen)
    }
    spin_lock_bh(&ip6_sk_fl_lock);
    for (sflp = &np->ipv6_fl_list;
    - (sfl = rcu_dereference(*sflp)) != NULL;
    + (sfl = rcu_dereference_protected(*sflp,
    + lockdep_is_held(&ip6_sk_fl_lock))) != NULL;
    sflp = &sfl->next) {
    if (sfl->fl->label == freq.flr_label) {
    if (freq.flr_label == (np->flow_label&IPV6_FLOWLABEL_MASK))
    np->flow_label &= ~IPV6_FLOWLABEL_MASK;
    - *sflp = rcu_dereference(sfl->next);
    + *sflp = sfl->next;
    spin_unlock_bh(&ip6_sk_fl_lock);
    fl_release(sfl->fl);
    kfree_rcu(sfl, rcu);
    --
    2.7.0
    \
     
     \ /
      Last update: 2016-03-08 01:01    [W:4.495 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site