]> git.karo-electronics.de Git - linux-beck.git/commitdiff
RDMA/cma: Don't allow IPoIB port space for IBoE
authorMoni Shoua <monis@mellanox.co.il>
Tue, 12 Jul 2011 11:23:15 +0000 (11:23 +0000)
committerRoland Dreier <roland@purestorage.com>
Mon, 18 Jul 2011 23:50:25 +0000 (16:50 -0700)
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: Moni Shoua <monis@mellanox.co.il>
Acked-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/core/cma.c

index b60ce22269655673c868e881ef974cac17bda3e5..ca4c5dcd7133365f09dc60d83f623d4b5412ec4d 100644 (file)
@@ -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 ?
                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);
        iboe_addr_get_sgid(dev_addr, &iboe_gid);
        memcpy(&gid, dev_addr->src_dev_addr +