IB/IPoIB: Fix bad error flow in ipoib_add_port()
Error values of ib_query_port() and ib_query_device() weren't propagated correctly. Because of that, ipoib_add_port() could return NULL value, which escaped the IS_ERR() check in ipoib_add_one() and we crashed. Signed-off-by: Amir Vadai <amirv@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
@ -1577,7 +1577,8 @@ static struct net_device *ipoib_add_port(const char *format,
|
|||||||
SET_NETDEV_DEV(priv->dev, hca->dma_device);
|
SET_NETDEV_DEV(priv->dev, hca->dma_device);
|
||||||
priv->dev->dev_id = port - 1;
|
priv->dev->dev_id = port - 1;
|
||||||
|
|
||||||
if (!ib_query_port(hca, port, &attr))
|
result = ib_query_port(hca, port, &attr);
|
||||||
|
if (!result)
|
||||||
priv->max_ib_mtu = ib_mtu_enum_to_int(attr.max_mtu);
|
priv->max_ib_mtu = ib_mtu_enum_to_int(attr.max_mtu);
|
||||||
else {
|
else {
|
||||||
printk(KERN_WARNING "%s: ib_query_port %d failed\n",
|
printk(KERN_WARNING "%s: ib_query_port %d failed\n",
|
||||||
@ -1598,7 +1599,8 @@ static struct net_device *ipoib_add_port(const char *format,
|
|||||||
goto device_init_failed;
|
goto device_init_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ipoib_set_dev_features(priv, hca))
|
result = ipoib_set_dev_features(priv, hca);
|
||||||
|
if (result)
|
||||||
goto device_init_failed;
|
goto device_init_failed;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user