Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Nov 2017 14:51:37 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r325807 - in head/sys: dev/mlx5/mlx5_ib ofed/drivers/infiniband/hw/mthca ofed/include/rdma
Message-ID:  <201711141451.vAEEpbxc086813@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Tue Nov 14 14:51:37 2017
New Revision: 325807
URL: https://svnweb.freebsd.org/changeset/base/325807

Log:
  Make sure the ib_wr_opcode enum is signed by adding a negative dummy element.
  Different compilers may optimise the enum type in different ways. This ensures
  coherency when range checking the value of enums in ibcore.
  
  Sponsored by:	Mellanox Technologies
  MFC after:	1 week

Modified:
  head/sys/dev/mlx5/mlx5_ib/mlx5_ib_qp.c
  head/sys/ofed/drivers/infiniband/hw/mthca/mthca_qp.c
  head/sys/ofed/include/rdma/ib_verbs.h

Modified: head/sys/dev/mlx5/mlx5_ib/mlx5_ib_qp.c
==============================================================================
--- head/sys/dev/mlx5/mlx5_ib/mlx5_ib_qp.c	Tue Nov 14 14:43:35 2017	(r325806)
+++ head/sys/dev/mlx5/mlx5_ib/mlx5_ib_qp.c	Tue Nov 14 14:51:37 2017	(r325807)
@@ -2497,7 +2497,7 @@ int mlx5_ib_post_send(struct ib_qp *ibqp, struct ib_se
 	}
 
 	for (nreq = 0; wr; nreq++, wr = wr->next) {
-		if (unlikely(wr->opcode >= ARRAY_SIZE(mlx5_ib_opcode))) {
+		if (unlikely(wr->opcode < 0 || wr->opcode >= ARRAY_SIZE(mlx5_ib_opcode))) {
 			mlx5_ib_warn(dev, "Invalid opcode 0x%x\n", wr->opcode);
 			err = -EINVAL;
 			*bad_wr = wr;

Modified: head/sys/ofed/drivers/infiniband/hw/mthca/mthca_qp.c
==============================================================================
--- head/sys/ofed/drivers/infiniband/hw/mthca/mthca_qp.c	Tue Nov 14 14:43:35 2017	(r325806)
+++ head/sys/ofed/drivers/infiniband/hw/mthca/mthca_qp.c	Tue Nov 14 14:51:37 2017	(r325807)
@@ -1765,7 +1765,7 @@ int mthca_tavor_post_send(struct ib_qp *ibqp, struct i
 
 		qp->wrid[ind] = wr->wr_id;
 
-		if (wr->opcode >= ARRAY_SIZE(mthca_opcode)) {
+		if (wr->opcode < 0 || wr->opcode >= ARRAY_SIZE(mthca_opcode)) {
 			mthca_err(dev, "opcode invalid\n");
 			err = -EINVAL;
 			*bad_wr = wr;

Modified: head/sys/ofed/include/rdma/ib_verbs.h
==============================================================================
--- head/sys/ofed/include/rdma/ib_verbs.h	Tue Nov 14 14:43:35 2017	(r325806)
+++ head/sys/ofed/include/rdma/ib_verbs.h	Tue Nov 14 14:51:37 2017	(r325807)
@@ -1136,6 +1136,8 @@ enum ib_wr_opcode {
 	IB_WR_RESERVED8,
 	IB_WR_RESERVED9,
 	IB_WR_RESERVED10,
+
+	IB_WR_DUMMY = -1,	/* force enum type signed */
 };
 
 enum ib_send_flags {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201711141451.vAEEpbxc086813>