Skip to contentSkip to conversation

staging/rdma/hfi1: pre-compute sc and sde for RC/UC QPs

DISCUSSION Dan Carpenter 2 participants 4 messages Nov 24, 2015 InfiniBand

lore
Share & tools
lore
#0 lore raw

Hello Mike Marciniszyn,

The patch d7b8ba5121e8: "staging/rdma/hfi1: pre-compute sc and sde for RC/UC QPs" from Nov 9, 2015, leads to the following static checker warning:

	drivers/staging/rdma/hfi1/verbs.c:1657 ah_to_sc()
	error: buffer overflow 'ibp->sl_to_sc' 32 <= 255

drivers/staging/rdma/hfi1/qp.c
817 if (attr_mask & IB_QP_PATH_MIG_STATE) {
818 qp->s_mig_state = attr->path_mig_state;
819 if (mig) {

   820                          qp->remote_ah_attr = qp->alt_ah_attr;
   821                          qp->port_num = qp->alt_ah_attr.port_num;
   822                          qp->s_pkey_index = qp->s_alt_pkey_index;
   823                          qp->s_flags |= HFI1_S_AHG_CLEAR;
   824                          qp->s_sc = ah_to_sc(ibqp->device, &qp->remote_ah_attr);

Do we need to verify (hfi1_check_ah(ibqp->device, &qp->remote_ah_attr)) before calling ah_to_sc()?

   825                          qp->s_sde = qp_to_sdma_engine(qp, qp->s_sc);
   826                  }
   827          }

regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#1 lore raw
Quoted 15 lines

The patch d7b8ba5121e8: "staging/rdma/hfi1: pre-compute sc and sde for RC/UC QPs" from Nov 9, 2015, leads to the following static checker warning:

	drivers/staging/rdma/hfi1/verbs.c:1657 ah_to_sc()
	error: buffer overflow 'ibp->sl_to_sc' 32 <= 255

drivers/staging/rdma/hfi1/qp.c

   817          if (attr_mask & IB_QP_PATH_MIG_STATE) {
   818                  qp->s_mig_state = attr->path_mig_state;
   819                  if (mig) {
   820                          qp->remote_ah_attr = qp->alt_ah_attr;
   821                          qp->port_num = qp->alt_ah_attr.port_num;
   822                          qp->s_pkey_index = qp->s_alt_pkey_index;
   823                          qp->s_flags |= HFI1_S_AHG_CLEAR;
   824                          qp->s_sc = ah_to_sc(ibqp->device, &qp-
Quoted 5 lines
Quoted 1 line

remote_ah_attr);

Do we need to verify (hfi1_check_ah(ibqp->device, &qp->remote_ah_attr)) before calling ah_to_sc()?

Looking at this now.

What was the static checker? Is it available for us to add to our testing?

Mike
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw
In reply to Dan Carpenter
Quoted 9 lines

drivers/staging/rdma/hfi1/qp.c

   817          if (attr_mask & IB_QP_PATH_MIG_STATE) {
   818                  qp->s_mig_state = attr->path_mig_state;
   819                  if (mig) {
   820                          qp->remote_ah_attr = qp->alt_ah_attr;
   821                          qp->port_num = qp->alt_ah_attr.port_num;
   822                          qp->s_pkey_index = qp->s_alt_pkey_index;
   823                          qp->s_flags |= HFI1_S_AHG_CLEAR;
   824                          qp->s_sc = ah_to_sc(ibqp->device, &qp-
Quoted 5 lines
Quoted 1 line

remote_ah_attr);

Do we need to verify (hfi1_check_ah(ibqp->device, &qp->remote_ah_attr)) before calling ah_to_sc()?

The modify code validates the IB_QP_ALT_PATH above:
647 if (attr_mask & IB_QP_ALT_PATH) {
648 u8 sc;
649
650 if (attr->alt_ah_attr.dlid >= HFI1_MULTICAST_LID_BASE)
651 goto inval;
652 if (hfi1_check_ah(qp->ibqp.device, &attr->alt_ah_attr))
653 goto inval;
654 if (attr->alt_pkey_index >= hfi1_get_npkeys(dd))
655 goto inval;
656 sc = ah_to_sc(ibqp->device, &attr->alt_ah_attr);
657 if (!qp_to_sdma_engine(qp, sc) &&
658 dd->flags & HFI1_HAS_SEND_DMA)
659 goto inval;
660 }

Mike

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#3 lore raw
In reply to Dan Carpenter
Quoted 15 lines
Quoted 9 lines

drivers/staging/rdma/hfi1/qp.c

   817          if (attr_mask & IB_QP_PATH_MIG_STATE) {
   818                  qp->s_mig_state = attr->path_mig_state;
   819                  if (mig) {
   820                          qp->remote_ah_attr = qp->alt_ah_attr;
   821                          qp->port_num = qp->alt_ah_attr.port_num;
   822                          qp->s_pkey_index = qp->s_alt_pkey_index;
   823                          qp->s_flags |= HFI1_S_AHG_CLEAR;
   824                          qp->s_sc = ah_to_sc(ibqp->device, &qp-
Quoted 5 lines
Quoted 1 line

remote_ah_attr);

Do we need to verify (hfi1_check_ah(ibqp->device,
&qp->remote_ah_attr)) before calling ah_to_sc()?

Quoted 16 lines

The modify code validates the IB_QP_ALT_PATH above:
647 if (attr_mask & IB_QP_ALT_PATH) {
648 u8 sc;
649
650 if (attr->alt_ah_attr.dlid >= HFI1_MULTICAST_LID_BASE)
651 goto inval;
652 if (hfi1_check_ah(qp->ibqp.device, &attr->alt_ah_attr))
653 goto inval;
654 if (attr->alt_pkey_index >= hfi1_get_npkeys(dd))
655 goto inval;
656 sc = ah_to_sc(ibqp->device, &attr->alt_ah_attr);
657 if (!qp_to_sdma_engine(qp, sc) &&
658 dd->flags & HFI1_HAS_SEND_DMA)
659 goto inval;
660 }

I should point out the the IB core insures these two attributes are present in the same modify.

Mike
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html