IPoIB: Make sure child devices use valid/proper pkeys
Make sure that the IB invalid pkey (0x0000 or 0x8000) isn't used for child devices. Also, make sure to always set the full membership bit for the pkey of devices created by rtnl link ops. Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
Родитель
3b2f64d00c
Коммит
3d790a4c26
|
@ -1461,7 +1461,7 @@ static ssize_t create_child(struct device *dev,
|
|||
if (sscanf(buf, "%i", &pkey) != 1)
|
||||
return -EINVAL;
|
||||
|
||||
if (pkey < 0 || pkey > 0xffff)
|
||||
if (pkey <= 0 || pkey > 0xffff || pkey == 0x8000)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
|
|
|
@ -119,6 +119,15 @@ static int ipoib_new_child_link(struct net *src_net, struct net_device *dev,
|
|||
} else
|
||||
child_pkey = nla_get_u16(data[IFLA_IPOIB_PKEY]);
|
||||
|
||||
if (child_pkey == 0 || child_pkey == 0x8000)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Set the full membership bit, so that we join the right
|
||||
* broadcast group, etc.
|
||||
*/
|
||||
child_pkey |= 0x8000;
|
||||
|
||||
err = __ipoib_vlan_add(ppriv, netdev_priv(dev), child_pkey, IPOIB_RTNL_CHILD);
|
||||
|
||||
if (!err && data)
|
||||
|
|
Загрузка…
Ссылка в новой задаче