net: Set strict_start_type for routes and rules
authorDavid Ahern <dsahern@gmail.com>
Wed, 22 May 2019 19:07:43 +0000 (12:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 23 May 2019 00:50:24 +0000 (17:50 -0700)
New userspace on an older kernel can send unknown and unsupported
attributes resulting in an incompelete config which is almost
always wrong for routing (few exceptions are passthrough settings
like the protocol that installed the route).

Set strict_start_type in the policies for IPv4 and IPv6 routes and
rules to detect new, unsupported attributes and fail the route add.

Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/fib_rules.h
net/ipv4/fib_frontend.c
net/ipv6/route.c

index b473df5b95121f3f810d8ffe29f858369f5c8fd5..eba8465e1d86b3e7bfade1a3cad170a976188a49 100644 (file)
@@ -103,6 +103,7 @@ struct fib_rule_notifier_info {
 };
 
 #define FRA_GENERIC_POLICY \
+       [FRA_UNSPEC]    = { .strict_start_type = FRA_DPORT_RANGE + 1 }, \
        [FRA_IIFNAME]   = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
        [FRA_OIFNAME]   = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
        [FRA_PRIORITY]  = { .type = NLA_U32 }, \
index dfa57a84ac143097c149872b71408996d5db0431..76055c66326a6da45f531dfb784c0c14b9b6500d 100644 (file)
@@ -645,6 +645,7 @@ int ip_rt_ioctl(struct net *net, unsigned int cmd, struct rtentry *rt)
 }
 
 const struct nla_policy rtm_ipv4_policy[RTA_MAX + 1] = {
+       [RTA_UNSPEC]            = { .strict_start_type = RTA_DPORT + 1 },
        [RTA_DST]               = { .type = NLA_U32 },
        [RTA_SRC]               = { .type = NLA_U32 },
        [RTA_IIF]               = { .type = NLA_U32 },
index c52a7f49d09698f16f2108a4917d95d04a95db85..5f0661c18624dda3256907045f0d15cfbaf53a90 100644 (file)
@@ -4221,6 +4221,7 @@ void rt6_mtu_change(struct net_device *dev, unsigned int mtu)
 }
 
 static const struct nla_policy rtm_ipv6_policy[RTA_MAX+1] = {
+       [RTA_UNSPEC]            = { .strict_start_type = RTA_DPORT + 1 },
        [RTA_GATEWAY]           = { .len = sizeof(struct in6_addr) },
        [RTA_PREFSRC]           = { .len = sizeof(struct in6_addr) },
        [RTA_OIF]               = { .type = NLA_U32 },