]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: limit altnames to 64k total
authorJakub Kicinski <kuba@kernel.org>
Wed, 9 Mar 2022 18:29:14 +0000 (10:29 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Apr 2022 18:03:06 +0000 (20:03 +0200)
[ Upstream commit 155fb43b70b5fce341347a77d1af2765d1e8fbb8 ]

Property list (altname is a link "property") is wrapped
in a nlattr. nlattrs length is 16bit so practically
speaking the list of properties can't be longer than
that, otherwise user space would have to interpret
broken netlink messages.

Prevent the problem from occurring by checking the length
of the property list before adding new entries.

Reported-by: George Shuklin <george.shuklin@gmail.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/core/rtnetlink.c

index 6a7883ec0489c3d4adf6b527c54ae3d3b2d3f9e6..ef56dc8d7c44c35e17d2892fac4b4e6dba3f12c8 100644 (file)
@@ -3631,12 +3631,23 @@ static int rtnl_alt_ifname(int cmd, struct net_device *dev, struct nlattr *attr,
                           bool *changed, struct netlink_ext_ack *extack)
 {
        char *alt_ifname;
+       size_t size;
        int err;
 
        err = nla_validate(attr, attr->nla_len, IFLA_MAX, ifla_policy, extack);
        if (err)
                return err;
 
+       if (cmd == RTM_NEWLINKPROP) {
+               size = rtnl_prop_list_size(dev);
+               size += nla_total_size(ALTIFNAMSIZ);
+               if (size >= U16_MAX) {
+                       NL_SET_ERR_MSG(extack,
+                                      "effective property list too long");
+                       return -EINVAL;
+               }
+       }
+
        alt_ifname = nla_strdup(attr, GFP_KERNEL_ACCOUNT);
        if (!alt_ifname)
                return -ENOMEM;