Commit d8e96745 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'net-fail-route'



David Ahern says:

====================
net: Fail route add with unsupported nexthop attribute

RTA_VIA was added for MPLS as a way of specifying a gateway from a
different address family. IPv4 and IPv6 do not currently support RTA_VIA
so using it leads to routes that are not what the user intended. Catch
and fail - returning a proper error message.

MPLS on the other hand does not support RTA_GATEWAY since it does not
make sense to have a nexthop from the MPLS address family. Similarly,
catch and fail - returning a proper error message.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 3da1ed7a be48220e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -710,6 +710,10 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,
		case RTA_GATEWAY:
			cfg->fc_gw = nla_get_be32(attr);
			break;
		case RTA_VIA:
			NL_SET_ERR_MSG(extack, "IPv4 does not support RTA_VIA attribute");
			err = -EINVAL;
			goto errout;
		case RTA_PRIORITY:
			cfg->fc_priority = nla_get_u32(attr);
			break;
+4 −0
Original line number Diff line number Diff line
@@ -4182,6 +4182,10 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
		cfg->fc_gateway = nla_get_in6_addr(tb[RTA_GATEWAY]);
		cfg->fc_flags |= RTF_GATEWAY;
	}
	if (tb[RTA_VIA]) {
		NL_SET_ERR_MSG(extack, "IPv6 does not support RTA_VIA attribute");
		goto errout;
	}

	if (tb[RTA_DST]) {
		int plen = (rtm->rtm_dst_len + 7) >> 3;
+3 −0
Original line number Diff line number Diff line
@@ -1838,6 +1838,9 @@ static int rtm_to_route_config(struct sk_buff *skb,
				goto errout;
			break;
		}
		case RTA_GATEWAY:
			NL_SET_ERR_MSG(extack, "MPLS does not support RTA_GATEWAY attribute");
			goto errout;
		case RTA_VIA:
		{
			if (nla_get_via(nla, &cfg->rc_via_alen,