Skip to content
  • Xin Long's avatar
    ipv6: fix the check before getting the cookie in rt6_get_cookie · 5a30ca96
    Xin Long authored
    [ Upstream commit b7999b07 ]
    
    In Jianlin's testing, netperf was broken with 'Connection reset by peer',
    as the cookie check failed in rt6_check() and ip6_dst_check() always
    returned NULL.
    
    It's caused by Commit 93531c67 ("net/ipv6: separate handling of FIB
    entries from dst based routes"), where the cookie can be got only when
    'c1'(see below) for setting dst_cookie whereas rt6_check() is called
    when !'c1' for checking dst_cookie, as we can see in ip6_dst_check().
    
    Since in ip6_dst_check() both rt6_dst_from_check() (c1) and rt6_check()
    (!c1) will check the 'from' cookie, this patch is to remove the c1 check
    in rt6_get_cookie(), so that the dst_cookie can always be set properly.
    
    c1:
      (rt->rt6i_flags & RTF_PCPU || unlikely(!list_empty(&rt->rt6i_uncached)))
    
    Fixes: 93531c67
    
     ("net/ipv6: separate handling of FIB entries from dst based routes")
    Reported-by: default avatarJianlin Shi <jishi@redhat.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5a30ca96