• Xin Long's avatar
    ipv6: some fixes for ipv6_dev_find() · 4ef1a7cb
    Xin Long authored
    This patch is to do 3 things for ipv6_dev_find():
    
      As David A. noticed,
    
      - rt6_lookup() is not really needed. Different from __ip_dev_find(),
        ipv6_dev_find() doesn't have a compatibility problem, so remove it.
    
      As Hideaki suggested,
    
      - "valid" (non-tentative) check for the address is also needed.
        ipv6_chk_addr() calls ipv6_chk_addr_and_flags(), which will
        traverse the address hash list, but it's heavy to be called
        inside ipv6_dev_find(). This patch is to reuse the code of
        ipv6_chk_addr_and_flags() for ipv6_dev_find().
    
      - dev parameter is passed into ipv6_dev_find(), as link-local
        addresses from user space has sin6_scope_id set and the dev
        lookup needs it.
    
    Fixes: 81f6cb31 ("ipv6: add ipv6_dev_find()")
    Suggested-by: default avatarYOSHIFUJI Hideaki <hideaki.yoshifuji@miraclelinux.com>
    Reported-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4ef1a7cb
addrconf.c 175 KB