On 1/24/18 10:09 AM, Stephen Hemminger wrote: > On Wed, 24 Jan 2018 08:29:24 -0800 > David Ahern <dsah...@gmail.com> wrote: > >> IPv6 allows routes to be installed when the device is not up (admin up). >> Worse, it does not mark it as LINKDOWN. IPv4 does not allow it and really >> there is no reason for IPv6 to allow it, so check the flags and deny if >> device is admin down. >> >> Signed-off-by: David Ahern <dsah...@gmail.com> >> --- >> v2 >> - missed setting err to -ENETDOWN (thanks for catching that Roopa) >> >> net/ipv6/route.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/net/ipv6/route.c b/net/ipv6/route.c >> index f85da2f1e729..4e8fab766018 100644 >> --- a/net/ipv6/route.c >> +++ b/net/ipv6/route.c >> @@ -2734,6 +2734,12 @@ static struct rt6_info *ip6_route_info_create(struct >> fib6_config *cfg, >> if (!dev) >> goto out; >> >> + err = -ENETDOWN; >> + if (!(dev->flags & IFF_UP)) { >> + NL_SET_ERR_MSG(extack, "Nexthop device is not up"); >> + goto out; >> + } >> + >> if (!ipv6_addr_any(&cfg->fc_prefsrc)) { >> if (!ipv6_chk_addr(net, &cfg->fc_prefsrc, dev, 0)) { >> NL_SET_ERR_MSG(extack, "Invalid source address"); > > This looks like a good idea. > > There are two equal ways to check for admin up. Either the dev flags or > look at link state via netif_running(). Maybe the latter would > be better. >
I used dev->flags for consistency with IPv4. Looking at use of netif_running vs dev->flags in IPv4 and IPv6 code the flag is much more prevalent.