IPoIB: protect child list in ipoib_ib_dev_flush
race condition: ipoib_ib_dev_flush is accessing child list without locks. Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
2e86541ec8
commit
4f71055a45
1 changed files with 4 additions and 0 deletions
|
@ -608,9 +608,13 @@ void ipoib_ib_dev_flush(void *_dev)
|
||||||
if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
|
if (test_bit(IPOIB_FLAG_ADMIN_UP, &priv->flags))
|
||||||
ipoib_ib_dev_up(dev);
|
ipoib_ib_dev_up(dev);
|
||||||
|
|
||||||
|
down(&priv->vlan_mutex);
|
||||||
|
|
||||||
/* Flush any child interfaces too */
|
/* Flush any child interfaces too */
|
||||||
list_for_each_entry(cpriv, &priv->child_intfs, list)
|
list_for_each_entry(cpriv, &priv->child_intfs, list)
|
||||||
ipoib_ib_dev_flush(&cpriv->dev);
|
ipoib_ib_dev_flush(&cpriv->dev);
|
||||||
|
|
||||||
|
up(&priv->vlan_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ipoib_ib_dev_cleanup(struct net_device *dev)
|
void ipoib_ib_dev_cleanup(struct net_device *dev)
|
||||||
|
|
Reference in a new issue