Author: slavash
Date: Wed Dec  5 13:19:21 2018
New Revision: 341523
URL: https://svnweb.freebsd.org/changeset/base/341523

Log:
  ibcore: Don't access invalid port.
  
  The port number in the listen_id_priv has been observed to be zero which
  means no port has been selected. The current code lacks a check for invalid
  port number.
  
  Submitted by:   hselasky@
  Approved by:    hselasky (mentor)
  MFC after:      1 week
  Sponsored by:   Mellanox Technologies

Modified:
  head/sys/ofed/drivers/infiniband/core/ib_cma.c

Modified: head/sys/ofed/drivers/infiniband/core/ib_cma.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/core/ib_cma.c      Wed Dec  5 13:18:50 
2018        (r341522)
+++ head/sys/ofed/drivers/infiniband/core/ib_cma.c      Wed Dec  5 13:19:21 
2018        (r341523)
@@ -621,16 +621,19 @@ static int cma_acquire_dev(struct rdma_id_private *id_
        if (listen_id_priv) {
                cma_dev = listen_id_priv->cma_dev;
                port = listen_id_priv->id.port_num;
-               gidp = rdma_protocol_roce(cma_dev->device, port) ?
-                      &iboe_gid : &gid;
 
-               ret = cma_validate_port(cma_dev->device, port,
-                                       rdma_protocol_ib(cma_dev->device, port) 
?
-                                       IB_GID_TYPE_IB :
-                                       listen_id_priv->gid_type, gidp, 
dev_addr);
-               if (!ret) {
-                       id_priv->id.port_num = port;
-                       goto out;
+               if (rdma_is_port_valid(cma_dev->device, port)) {
+                       gidp = rdma_protocol_roce(cma_dev->device, port) ?
+                              &iboe_gid : &gid;
+
+                       ret = cma_validate_port(cma_dev->device, port,
+                               rdma_protocol_ib(cma_dev->device, port) ?
+                               IB_GID_TYPE_IB :
+                               listen_id_priv->gid_type, gidp, dev_addr);
+                       if (!ret) {
+                               id_priv->id.port_num = port;
+                               goto out;
+                       }
                }
        }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to