RDMA/ucma: Mask QPN to be 24 bits according to IBTA
PATCH 1/1 RDMA/ucma: Mask QPN to be 24 bits according to IBTA
From: Leon Romanovsky <[email protected]>
IBTA declares QPN as 24bits, mask input to ensure that kernel doesn't get higher bits and ensure by adding WANR_ONCE() that other CM users do the same.
Fixes 75216638572f ("RDMA/cma: Export rdma cm interface to userspace")
Signed-off-by Leon Romanovsky <[email protected]>
---
Changelog:
v0: Rebase
--- drivers/infiniband/core/cm.c | 3 +++ drivers/infiniband/core/ucma.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
drivers/infiniband/core/cm.c +3 -0
@@ -2188,6 +2188,9 @@ int ib_send_cm_rep(struct ib_cm_id *cm_id, cm_id_priv->initiator_depth = param->initiator_depth; cm_id_priv->responder_resources = param->responder_resources; cm_id_priv->rq_psn =cpu_to_be32 (IBA_GET (CM_REP_STARTING_PSN , rep_msg)); +WARN_ONCE (param->qp_num &0xFF000000 , +"IBTA declares QPN to be 24 bits, but it is 0x%X\n" , + param->qp_num); cm_id_priv->local_qpn =cpu_to_be32 (param->qp_num &0xFFFFFF ); out:spin_unlock_irqrestore (&cm_id_priv->lock, flags);
drivers/infiniband/core/ucma.c +1 -1
@@ -1045,7 +1045,7 @@ static void ucma_copy_conn_param(struct rdma_cm_id *id, dst->retry_count = src->retry_count; dst->rnr_retry_count = src->rnr_retry_count; dst->srq = src->srq; - dst->qp_num = src->qp_num; + dst->qp_num = src->qp_num &0xFFFFFF ; dst->qkey = (id->route.addr.src_addr.ss_family ==AF_IB ) ? src->qkey :0 ; }
--
2.24.1