aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/cm.c
diff options
context:
space:
mode:
authorMatan Barak <matanb@mellanox.com>2015-12-23 14:56:53 +0200
committerDoug Ledford <dledford@redhat.com>2015-12-23 10:35:12 -0500
commit200298326b276d8dbeff204f7d407432100d9963 (patch)
tree285f2b2fbcc1c6672ce95f7d24009b328078fba4 /drivers/infiniband/core/cm.c
parentIB/core: Move rdma_is_upper_dev_rcu to header file (diff)
downloadlinux-dev-200298326b276d8dbeff204f7d407432100d9963.tar.xz
linux-dev-200298326b276d8dbeff204f7d407432100d9963.zip
IB/core: Validate route when we init ah
In order to make sure API users don't try to use SGIDs which don't conform to the routing table, validate the route before searching the RoCE GID table. Signed-off-by: Matan Barak <matanb@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/core/cm.c')
-rw-r--r--drivers/infiniband/core/cm.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
index d883a322fc65..e3a95d1dae57 100644
--- a/drivers/infiniband/core/cm.c
+++ b/drivers/infiniband/core/cm.c
@@ -1646,8 +1646,11 @@ static int cm_req_handler(struct cm_work *work)
cm_id_priv->av.ah_attr.grh.sgid_index,
&gid, &gid_attr);
if (!ret) {
- if (gid_attr.ndev)
+ if (gid_attr.ndev) {
+ work->path[0].ifindex = gid_attr.ndev->ifindex;
+ work->path[0].net = dev_net(gid_attr.ndev);
dev_put(gid_attr.ndev);
+ }
work->path[0].gid_type = gid_attr.gid_type;
ret = cm_init_av_by_path(&work->path[0], &cm_id_priv->av);
}
@@ -1656,8 +1659,11 @@ static int cm_req_handler(struct cm_work *work)
work->port->port_num, 0,
&work->path[0].sgid,
&gid_attr);
- if (!err && gid_attr.ndev)
+ if (!err && gid_attr.ndev) {
+ work->path[0].ifindex = gid_attr.ndev->ifindex;
+ work->path[0].net = dev_net(gid_attr.ndev);
dev_put(gid_attr.ndev);
+ }
work->path[0].gid_type = gid_attr.gid_type;
ib_send_cm_rej(cm_id, IB_CM_REJ_INVALID_GID,
&work->path[0].sgid, sizeof work->path[0].sgid,