Re: [patch net-next v3 17/17] rocker: add ndo_bridge_setlnk/getlink support for learning policy

Thomas Graf
2014-11-26T11:07:13Z

On 11/25/14 at 11:28am, Jiri Pirko wrote:
> @@ -3657,6 +3693,64 @@ skip:
> return idx;
> }
>
> +static int rocker_port_bridge_setlink(struct net_device *dev,
> + struct nlmsghdr *nlh)
> +{
> + struct rocker_port *rocker_port = netdev_priv(dev);
> + struct nlattr *protinfo;
> + struct nlattr *afspec;
> + struct nlattr *attr;
> + u16 mode;
> + int err;
> +
> + protinfo = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg),
> + IFLA_PROTINFO);
> + afspec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
> +
> + if (afspec) {
> + attr = nla_find_nested(afspec, IFLA_BRIDGE_MODE);
> + if (attr) {
> + mode = nla_get_u16(attr);
> + if (mode != BRIDGE_MODE_SWDEV)
> + return -EINVAL;
> + }
> + }

The Netlink message is completely unverified at this point. All
rtnl_bridge_setlink() does is verify that msgsize >= ifinfomsg.
All of the drivers but br_setlink() need fixing in this regard.