Added a check to the return values of ib_get_cached_gid and ib_get_cached_pkey
before using the values that they set (becasue those functions may fail)

Signed-off-by: Dotan Barak <[EMAIL PROTECTED]>

---

diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
index 8cba9c5..6d0123d 100644
--- a/drivers/infiniband/hw/mlx4/qp.c
+++ b/drivers/infiniband/hw/mlx4/qp.c
@@ -1065,6 +1065,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, 
struct ib_send_wr *wr,
        int header_size;
        int spc;
        int i;
+       int ret;
 
        send_size = 0;
        for (i = 0; i < wr->num_sge; ++i)
@@ -1082,8 +1083,10 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, 
struct ib_send_wr *wr,
                sqp->ud_header.grh.flow_label    =
                        ah->av.sl_tclass_flowlabel & cpu_to_be32(0xfffff);
                sqp->ud_header.grh.hop_limit     = ah->av.hop_limit;
-               ib_get_cached_gid(ib_dev, be32_to_cpu(ah->av.port_pd) >> 24,
+               ret = ib_get_cached_gid(ib_dev, be32_to_cpu(ah->av.port_pd) >> 
24,
                                  ah->av.gid_index, 
&sqp->ud_header.grh.source_gid);
+               if (ret)
+                       return ret;
                memcpy(sqp->ud_header.grh.destination_gid.raw,
                       ah->av.dgid, 16);
        }
@@ -1114,9 +1117,11 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, 
struct ib_send_wr *wr,
                sqp->ud_header.lrh.source_lid = IB_LID_PERMISSIVE;
        sqp->ud_header.bth.solicited_event = !!(wr->send_flags & 
IB_SEND_SOLICITED);
        if (!sqp->qp.ibqp.qp_num)
-               ib_get_cached_pkey(ib_dev, sqp->qp.port, sqp->pkey_index, 
&pkey);
+               ret = ib_get_cached_pkey(ib_dev, sqp->qp.port, sqp->pkey_index, 
&pkey);
        else
-               ib_get_cached_pkey(ib_dev, sqp->qp.port, wr->wr.ud.pkey_index, 
&pkey);
+               ret = ib_get_cached_pkey(ib_dev, sqp->qp.port, 
wr->wr.ud.pkey_index, &pkey);
+       if (ret)
+               return ret;
        sqp->ud_header.bth.pkey = cpu_to_be16(pkey);
        sqp->ud_header.bth.destination_qpn = cpu_to_be32(wr->wr.ud.remote_qpn);
        sqp->ud_header.bth.psn = cpu_to_be32((sqp->send_psn++) & ((1 << 24) - 
1));
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to