FAILED: patch "[PATCH] lwtunnel: Validate RTA_ENCAP_TYPE attribute length" failed to apply to 4.14-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 8bda81a4d400cf8a72e554012f0d8c45e07a3904 Mon Sep 17 00:00:00 2001
From: David Ahern <[email protected]>
Date: Thu, 30 Dec 2021 17:36:35 -0700
Subject: [PATCH] lwtunnel: Validate RTA_ENCAP_TYPE attribute length
lwtunnel_valid_encap_type_attr is used to validate encap attributes within a multipath route. Add length validation checking to the type.
lwtunnel_valid_encap_type_attr is called converting attributes to fib{6,}_config struct which means it is used before fib_get_nhs, ip6_route_multipath_add, and ip6_route_multipath_del - other locations that use rtnh_ok and then nla_get_u16 on RTA_ENCAP_TYPE attribute.
net/core/lwtunnel.c +4 -0
@@ -197,6 +197,10 @@ int lwtunnel_valid_encap_type_attr(struct nlattr *attr, int remaining, nla_entype =nla_find (attrs, attrlen,RTA_ENCAP_TYPE );if (nla_entype) { +if (nla_len (nla_entype) <sizeof (u16)) { +NL_SET_ERR_MSG (extack,"Invalid RTA_ENCAP_TYPE" ); +return -EINVAL ; + } encap_type =nla_get_u16 (nla_entype); if (lwtunnel_valid_encap_type(encap_type,
net/ipv4/fib_semantics.c +3 -0
@@ -740,6 +740,9 @@ static int fib_get_nhs(struct fib_info *fi, struct rtnexthop *rtnh, } fib_cfg.fc_encap =nla_find (attrs, attrlen,RTA_ENCAP ); +/* RTA_ENCAP_TYPE length checked in +* lwtunnel_valid_encap_type_attr +*/ nla =nla_find (attrs, attrlen,RTA_ENCAP_TYPE );if (nla) fib_cfg.fc_encap_type =nla_get_u16 (nla);
net/ipv6/route.c +4 -0
@@ -5287,6 +5287,10 @@ static int ip6_route_multipath_add(struct fib6_config *cfg, r_cfg.fc_flags |=RTF_GATEWAY ; } r_cfg.fc_encap =nla_find (attrs, attrlen,RTA_ENCAP ); + +/* RTA_ENCAP_TYPE length checked in +* lwtunnel_valid_encap_type_attr +*/ nla =nla_find (attrs, attrlen,RTA_ENCAP_TYPE );if (nla) r_cfg.fc_encap_type =nla_get_u16 (nla);