Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2efdd6a0 authored by Moni Shoua's avatar Moni Shoua Committed by Roland Dreier
Browse files

RDMA/cma: Don't allow IPoIB port space for IBoE



This patch fixes a kernel crash in cma_set_qkey().

When the link layer is Ethernet, it is wrong to use IPoIB port space
since no IPoIB interface is available.  Specifically, setting the
Q_Key when port space is RDMA_PS_IPOIB requires MGID calculation and
an SA query, which doesn't make sense over Ethernet.

Signed-off-by: default avatarMoni Shoua <monis@mellanox.co.il>
Acked-by: default avatarSean Hefty <sean.hefty@intel.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 0c9361fc
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -359,6 +359,10 @@ static int cma_acquire_dev(struct rdma_id_private *id_priv)
	enum rdma_link_layer dev_ll = dev_addr->dev_type == ARPHRD_INFINIBAND ?
	enum rdma_link_layer dev_ll = dev_addr->dev_type == ARPHRD_INFINIBAND ?
		IB_LINK_LAYER_INFINIBAND : IB_LINK_LAYER_ETHERNET;
		IB_LINK_LAYER_INFINIBAND : IB_LINK_LAYER_ETHERNET;


	if (dev_ll != IB_LINK_LAYER_INFINIBAND &&
	    id_priv->id.ps == RDMA_PS_IPOIB)
		return -EINVAL;

	mutex_lock(&lock);
	mutex_lock(&lock);
	iboe_addr_get_sgid(dev_addr, &iboe_gid);
	iboe_addr_get_sgid(dev_addr, &iboe_gid);
	memcpy(&gid, dev_addr->src_dev_addr +
	memcpy(&gid, dev_addr->src_dev_addr +