Commit 200d1713 authored by Moni Shoua's avatar Moni Shoua Committed by Jeff Garzik

IB/ipoib: Verify address handle validity on send

When the bonding device senses a carrier loss of its active slave it replaces
that slave with a new one. In between the times when the carrier of an IPoIB
device goes down and ipoib_neigh is destroyed, it is possible that the
bonding driver will send a packet on a new slave that uses an old ipoib_neigh.
This patch detects and prevents this from happenning.

Signed-off-by: Moni Shoua <monis at voltaire.com>
Signed-off-by: Or Gerlitz <ogerlitz at voltaire.com>
Acked-by: default avatarRoland Dreier <rdreier@cisco.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 732a2170
...@@ -692,9 +692,10 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -692,9 +692,10 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
goto out; goto out;
} }
} else if (neigh->ah) { } else if (neigh->ah) {
if (unlikely(memcmp(&neigh->dgid.raw, if (unlikely((memcmp(&neigh->dgid.raw,
skb->dst->neighbour->ha + 4, skb->dst->neighbour->ha + 4,
sizeof(union ib_gid)))) { sizeof(union ib_gid))) ||
(neigh->dev != dev))) {
spin_lock(&priv->lock); spin_lock(&priv->lock);
/* /*
* It's safe to call ipoib_put_ah() inside * It's safe to call ipoib_put_ah() inside
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment