diff options
author | Moni Shoua <monis@mellanox.co.il> | 2011-07-12 07:23:15 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2011-07-18 19:50:25 -0400 |
commit | 2efdd6a038b2d72e74deb8d4725db1663135268c (patch) | |
tree | 9c03373f1cca98e6538f57c7da8984fba57d99ca /drivers/infiniband | |
parent | 0c9361fcdeccd316ed67d85aa819c08066964c5b (diff) |
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: Moni Shoua <monis@mellanox.co.il>
Acked-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/core/cma.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index b60ce2226965..ca4c5dcd7133 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
@@ -359,6 +359,10 @@ static int cma_acquire_dev(struct rdma_id_private *id_priv) | |||
359 | enum rdma_link_layer dev_ll = dev_addr->dev_type == ARPHRD_INFINIBAND ? | 359 | enum rdma_link_layer dev_ll = dev_addr->dev_type == ARPHRD_INFINIBAND ? |
360 | IB_LINK_LAYER_INFINIBAND : IB_LINK_LAYER_ETHERNET; | 360 | IB_LINK_LAYER_INFINIBAND : IB_LINK_LAYER_ETHERNET; |
361 | 361 | ||
362 | if (dev_ll != IB_LINK_LAYER_INFINIBAND && | ||
363 | id_priv->id.ps == RDMA_PS_IPOIB) | ||
364 | return -EINVAL; | ||
365 | |||
362 | mutex_lock(&lock); | 366 | mutex_lock(&lock); |
363 | iboe_addr_get_sgid(dev_addr, &iboe_gid); | 367 | iboe_addr_get_sgid(dev_addr, &iboe_gid); |
364 | memcpy(&gid, dev_addr->src_dev_addr + | 368 | memcpy(&gid, dev_addr->src_dev_addr + |