浏览代码

IB/ipoib: Fix oops with ipoib_debug_mcast set

Need to set mcast->ah before debug code dereferences it.

Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Or Gerlitz 19 年之前
父节点
当前提交
624d01f899
共有 1 个文件被更改,包括 4 次插入4 次删除
  1. 4 4
      drivers/infiniband/ulp/ipoib/ipoib_multicast.c

+ 4 - 4
drivers/infiniband/ulp/ipoib/ipoib_multicast.c

@@ -264,6 +264,10 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
 		if (!ah) {
 		if (!ah) {
 			ipoib_warn(priv, "ib_address_create failed\n");
 			ipoib_warn(priv, "ib_address_create failed\n");
 		} else {
 		} else {
+			spin_lock_irq(&priv->lock);
+			mcast->ah = ah;
+			spin_unlock_irq(&priv->lock);
+
 			ipoib_dbg_mcast(priv, "MGID " IPOIB_GID_FMT
 			ipoib_dbg_mcast(priv, "MGID " IPOIB_GID_FMT
 					" AV %p, LID 0x%04x, SL %d\n",
 					" AV %p, LID 0x%04x, SL %d\n",
 					IPOIB_GID_ARG(mcast->mcmember.mgid),
 					IPOIB_GID_ARG(mcast->mcmember.mgid),
@@ -271,10 +275,6 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
 					be16_to_cpu(mcast->mcmember.mlid),
 					be16_to_cpu(mcast->mcmember.mlid),
 					mcast->mcmember.sl);
 					mcast->mcmember.sl);
 		}
 		}
-
-		spin_lock_irq(&priv->lock);
-		mcast->ah = ah;
-		spin_unlock_irq(&priv->lock);
 	}
 	}
 
 
 	/* actually send any queued packets */
 	/* actually send any queued packets */