ipv6: some fixes for ipv6_dev_find()
authorXin Long <lucien.xin@gmail.com>
Mon, 17 Aug 2020 06:30:49 +0000 (14:30 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 Aug 2020 22:58:53 +0000 (15:58 -0700)
commit4ef1a7cb08e94da1f2f2a34ee6cefe7ae142dc98
tree730748995d08ea86e62673462e06c2beff9ad6fa
parent0410d07190961ac526f05085765a8d04d926545b
ipv6: some fixes for ipv6_dev_find()

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: 81f6cb31222d ("ipv6: add ipv6_dev_find()")
Suggested-by: YOSHIFUJI Hideaki <hideaki.yoshifuji@miraclelinux.com>
Reported-by: David Ahern <dsahern@gmail.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/addrconf.h
net/ipv6/addrconf.c
net/tipc/udp_media.c