+++ /dev/null
-Bottom: af107da0bed19305f20a33e98ee901270ebb4192
-Top: 3707c3c54ad3394e55315b53287be7dcd2c23b90
-Author: Sean Hefty <sean.hefty@intel.com>
-Date: 2010-01-22 16:22:36 -0800
-
-dapl: use private_data_len for mem copies
-
-When copying private_data out of rdma_cm events, use the
-reported private_data_len for the size, and not IB maximums.
-This fixes a bug running over the librdmacm on windows, where
-DAPL accessed invalid memory.
-
-Signed-off-by: Sean Hefty <sean.hefty@intel.com>
-
-
----
-
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h b/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h
-index 97ab42e..92cb9b7 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h
-@@ -239,10 +239,8 @@ DAT_RETURN dapls_ib_cm_remote_addr (
- IN DAT_HANDLE dat_handle,
- OUT DAT_SOCK_ADDR6 *remote_ia_address);
-
--int dapls_ib_private_data_size (
-- IN DAPL_PRIVATE *prd_ptr,
-- IN DAPL_PDATA_OP conn_op,
-- IN DAPL_HCA *hca_ptr);
-+int dapls_ib_private_data_size(
-+ IN DAPL_HCA *hca_ptr);
-
- void
- dapls_query_provider_specific_attr(
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c b/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c
-index 2340489..af68f85 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c
-@@ -51,6 +51,7 @@
- DAT_RETURN dapli_connection_request(IN dp_ib_cm_handle_t ib_cm_handle,
- IN DAPL_SP * sp_ptr,
- IN DAPL_PRIVATE * prd_ptr,
-+ IN int private_data_size,
- IN DAPL_EVD * evd_ptr);
-
- DAPL_EP *dapli_get_sp_ep(IN dp_ib_cm_handle_t ib_cm_handle,
-@@ -74,7 +75,8 @@ DAPL_EP *dapli_get_sp_ep(IN dp_ib_cm_handle_t ib_cm_handle,
- * None
- *
- */
--void dapls_cr_callback(IN dp_ib_cm_handle_t ib_cm_handle, IN const ib_cm_events_t ib_cm_event, IN const void *private_data_ptr, /* event data */
-+void dapls_cr_callback(IN dp_ib_cm_handle_t ib_cm_handle, IN const ib_cm_events_t ib_cm_event,
-+ IN const void *private_data_ptr, IN const int private_data_size,
- IN const void *context)
- {
- DAPL_EP *ep_ptr;
-@@ -174,8 +176,7 @@ void dapls_cr_callback(IN dp_ib_cm_handle_t ib_cm_handle, IN const ib_cm_events_
- * event if appropriate.
- */
- dat_status = dapli_connection_request(ib_cm_handle,
-- sp_ptr,
-- prd_ptr, evd_ptr);
-+ sp_ptr, prd_ptr, private_data_size, evd_ptr);
- /* Set evd_ptr = NULL so we don't generate an event below */
- evd_ptr = NULL;
-
-@@ -308,7 +309,8 @@ void dapls_cr_callback(IN dp_ib_cm_handle_t ib_cm_handle, IN const ib_cm_events_
- DAT_RETURN
- dapli_connection_request(IN dp_ib_cm_handle_t ib_cm_handle,
- IN DAPL_SP * sp_ptr,
-- IN DAPL_PRIVATE * prd_ptr, IN DAPL_EVD * evd_ptr)
-+ IN DAPL_PRIVATE * prd_ptr, IN int private_data_size,
-+ IN DAPL_EVD * evd_ptr)
- {
- DAT_RETURN dat_status;
-
-@@ -346,14 +348,7 @@ dapli_connection_request(IN dp_ib_cm_handle_t ib_cm_handle,
-
- /* Private data size will be determined by the provider layer */
- cr_ptr->param.private_data = cr_ptr->private_data;
-- if (prd_ptr == NULL) {
-- cr_ptr->param.private_data_size = 0;
-- } else {
-- cr_ptr->param.private_data_size =
-- dapls_ib_private_data_size(prd_ptr, DAPL_PDATA_CONN_REQ,
-- sp_ptr->header.owner_ia->
-- hca_ptr);
-- }
-+ cr_ptr->param.private_data_size = private_data_size;
- if (cr_ptr->param.private_data_size > 0) {
- dapl_os_memcpy(cr_ptr->private_data,
- prd_ptr->private_data,
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h b/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h
-index 33aed7c..cec980f 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h
-@@ -52,7 +52,8 @@ void
- dapls_cr_callback (
- IN dp_ib_cm_handle_t ib_cm_handle,
- IN const ib_cm_events_t ib_cm_event,
-- IN const void *instant_data_p,
-+ IN const void *private_data_ptr,
-+ IN const int private_data_size,
- IN const void *context);
-
- #endif /* _DAPL_CR_UTIL_H_ */
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c b/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c
-index 5e4dc41..4e5e112 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c
-@@ -79,7 +79,6 @@ dapl_ep_connect(IN DAT_EP_HANDLE ep_handle,
- DAPL_EP alloc_ep;
- DAT_RETURN dat_status;
- DAT_COUNT req_hdr_size;
-- DAT_UINT32 max_req_pdata_size;
- void *private_data_ptr;
-
- dapl_dbg_log(DAPL_DBG_TYPE_API | DAPL_DBG_TYPE_CM,
-@@ -258,16 +257,6 @@ dapl_ep_connect(IN DAT_EP_HANDLE ep_handle,
- */
- req_hdr_size = (sizeof(DAPL_PRIVATE) - DAPL_MAX_PRIVATE_DATA_SIZE);
-
-- max_req_pdata_size =
-- dapls_ib_private_data_size(NULL, DAPL_PDATA_CONN_REQ,
-- ep_ptr->header.owner_ia->hca_ptr);
--
-- if (private_data_size + req_hdr_size > (DAT_COUNT) max_req_pdata_size) {
-- dapl_os_unlock(&ep_ptr->header.lock);
-- dat_status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG5);
-- goto bail;
-- }
--
- /* transition the state before requesting a connection to avoid
- * race conditions
- */
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c b/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c
-index a50a6cb..505a9f2 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c
-@@ -565,11 +565,11 @@ dapl_ep_legacy_post_disconnect(DAPL_EP * ep_ptr,
- ep_ptr, cr_ptr->ib_cm_handle);
-
- dapls_cr_callback(cr_ptr->ib_cm_handle,
-- ib_cm_event, NULL, cr_ptr->sp_ptr);
-+ ib_cm_event, NULL, 0, cr_ptr->sp_ptr);
- } else {
- dapl_evd_connection_callback(ep_ptr->cm_handle,
- ib_cm_event,
-- NULL, (void *)ep_ptr);
-+ NULL, 0, (void *)ep_ptr);
- }
- } else {
- dapl_os_unlock(&ep_ptr->header.lock);
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c b/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c
-index e2fb93b..8881362 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c
-@@ -65,6 +65,7 @@ void
- dapl_evd_connection_callback(IN dp_ib_cm_handle_t ib_cm_handle,
- IN const ib_cm_events_t ib_cm_event,
- IN const void *private_data_ptr,
-+ IN const int private_data_size,
- IN const void *context)
- {
- DAPL_EP *ep_ptr;
-@@ -72,7 +73,6 @@ dapl_evd_connection_callback(IN dp_ib_cm_handle_t ib_cm_handle,
- DAPL_PRIVATE *prd_ptr;
- DAT_EVENT_NUMBER dat_event_num;
- DAT_RETURN dat_status;
-- int private_data_size;
-
- dapl_dbg_log(DAPL_DBG_TYPE_CM | DAPL_DBG_TYPE_CALLBACK,
- "--> dapl_evd_connection_callback: ctxt: %p event: %x cm_handle %p\n",
-@@ -96,7 +96,6 @@ dapl_evd_connection_callback(IN dp_ib_cm_handle_t ib_cm_handle,
- DAPL_CNTR(evd_ptr, DCNT_EVD_CONN_CALLBACK);
-
- prd_ptr = (DAPL_PRIVATE *) private_data_ptr;
-- private_data_size = 0;
- /*
- * All operations effect the EP, so lock it once and unlock
- * when necessary
-@@ -132,16 +131,6 @@ dapl_evd_connection_callback(IN dp_ib_cm_handle_t ib_cm_handle,
- }
- ep_ptr->param.ep_state = DAT_EP_STATE_CONNECTED;
- ep_ptr->cm_handle = ib_cm_handle;
-- if (prd_ptr == NULL) {
-- private_data_size = 0;
-- } else {
-- private_data_size =
-- dapls_ib_private_data_size(prd_ptr,
-- DAPL_PDATA_CONN_REP,
-- ep_ptr->header.
-- owner_ia->
-- hca_ptr);
-- }
-
- if (private_data_size > 0) {
- /* copy in the private data */
-@@ -157,13 +146,6 @@ dapl_evd_connection_callback(IN dp_ib_cm_handle_t ib_cm_handle,
- case DAT_CONNECTION_EVENT_PEER_REJECTED:
- {
- /* peer reject may include private data */
-- if (prd_ptr != NULL)
-- private_data_size =
-- dapls_ib_private_data_size(prd_ptr,
-- DAPL_PDATA_CONN_REJ,
-- ep_ptr->header.
-- owner_ia->
-- hca_ptr);
-
- if (private_data_size > 0)
- dapl_os_memcpy(ep_ptr->private.private_data,
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h b/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h
-index 2304435..e5a7c3f 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h
-@@ -137,7 +137,8 @@ dapls_evd_post_connection_event_ext (
- extern void dapl_evd_connection_callback (
- IN dp_ib_cm_handle_t ib_cm_handle,
- IN const ib_cm_events_t ib_cm_events,
-- IN const void *instant_data_p,
-+ IN const void *private_data_ptr,
-+ IN const int private_data_size,
- IN const void * context );
-
- /* dto verb callback */
-diff --git a/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c b/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c
-index 6fcc4a2..d530d72 100644
---- a/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c
-+++ b/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c
-@@ -150,8 +150,7 @@ dapl_ia_query(IN DAT_IA_HANDLE ia_handle,
- * to 0 unless IBHOSTS_NAMING is enabled.
- */
- provider_attr->max_private_data_size =
-- dapls_ib_private_data_size(NULL, DAPL_PDATA_CONN_REQ,
-- ia_ptr->hca_ptr) -
-+ dapls_ib_private_data_size(ia_ptr->hca_ptr) -
- (sizeof(DAPL_PRIVATE) - DAPL_MAX_PRIVATE_DATA_SIZE);
- provider_attr->supports_multipath = DAT_FALSE;
- provider_attr->ep_creator = DAT_PSP_CREATES_EP_NEVER;
-diff --git a/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c b/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c
-index 149bcbf..fac567a 100644
---- a/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c
-+++ b/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c
-@@ -216,6 +216,7 @@ dapli_ib_cm_dreq_cb (
- dapls_cr_callback ( ep_ptr->cm_handle,
- IB_CME_DISCONNECTED,
- (void * __ptr64) p_cm_dreq_rec->p_dreq_pdata,
-+ IB_DREQ_PDATA_SIZE,
- (void *) (((DAPL_CR *) ep_ptr->cr_ptr)->sp_ptr) );
- }
- else
-@@ -226,6 +227,7 @@ dapli_ib_cm_dreq_cb (
- IB_CME_DISCONNECTED,
- (void * __ptr64)
- p_cm_dreq_rec->p_dreq_pdata,
-+ IB_DREQ_PDATA_SIZE,
- p_cm_dreq_rec->qp_context );
- }
- }
-@@ -285,6 +287,7 @@ dapli_ib_cm_drep_cb (
- dapls_cr_callback ( ep_ptr->cm_handle,
- IB_CME_DISCONNECTED,
- (void * __ptr64) p_cm_drep_rec->p_drep_pdata,
-+ IB_DREP_PDATA_SIZE,
- (void *) (((DAPL_CR *) ep_ptr->cr_ptr)->sp_ptr) );
- }
- else
-@@ -294,6 +297,7 @@ dapli_ib_cm_drep_cb (
- ep_ptr->cm_handle,
- IB_CME_DISCONNECTED,
- (void * __ptr64) p_cm_drep_rec->p_drep_pdata,
-+ IB_DREP_PDATA_SIZE,
- p_cm_drep_rec->qp_context );
- }
- }
-@@ -371,6 +375,7 @@ dapli_ib_cm_rep_cb (
- (dp_ib_cm_handle_t)&p_cm_rep_rec->h_cm_rep,
- cm_cb_op,
- (void *) prd_ptr,
-+ IB_REP_PDATA_SIZE,
- (void * __ptr64) p_cm_rep_rec->qp_context);
- }
-
-@@ -454,6 +459,7 @@ dapli_ib_cm_rej_cb (
- dapls_cr_callback ( ep_ptr->cm_handle,
- cm_event,
- (void * __ptr64) p_cm_rej_rec->p_rej_pdata,
-+ IB_REJ_PDATA_SIZE,
- (void *) ((DAPL_CR *) ep_ptr->cr_ptr)->sp_ptr);
- }
- else
-@@ -462,6 +468,7 @@ dapli_ib_cm_rej_cb (
- ep_ptr->cm_handle,
- cm_event,
- (void * __ptr64) p_cm_rej_rec->p_rej_pdata,
-+ IB_REJ_PDATA_SIZE,
- (void * __ptr64) p_cm_rej_rec->qp_context );
- }
-
-@@ -610,6 +617,7 @@ dapli_ib_cm_req_cb ( IN ib_cm_req_rec_t *p_cm_req_rec )
- dapls_cr_callback ( cm_handle,
- IB_CME_CONNECTION_REQUEST_PENDING,
- (void * __ptr64) p_cm_req_rec->p_req_pdata,
-+ IB_REQ_PDATA_SIZE,
- (void * __ptr64) sp_ptr );
- }
-
-@@ -652,6 +660,7 @@ dapli_ib_cm_rtu_cb (
- dapls_cr_callback ( ep_ptr->cm_handle,
- IB_CME_CONNECTED,
- (void * __ptr64) p_cm_rtu_rec->p_rtu_pdata,
-+ IB_RTU_PDATA_SIZE,
- (void *) sp_ptr);
-
- }
-@@ -661,6 +670,7 @@ dapli_ib_cm_rtu_cb (
- ep_ptr->cm_handle,
- IB_CME_CONNECTED,
- (void * __ptr64) p_cm_rtu_rec->p_rtu_pdata,
-+ IB_RTU_PDATA_SIZE,
- (void *) ep_ptr);
- }
- }
-@@ -1297,15 +1307,6 @@ dapls_ib_reject_connection ( IN dp_ib_cm_handle_t ib_cm_handle,
- cm_rej.p_ari = (ib_ari_t *)&rej_table[reject_reason];
- cm_rej.ari_length = (uint8_t)strlen (rej_table[reject_reason]);
-
-- if (private_data_size >
-- dapls_ib_private_data_size(NULL,DAPL_PDATA_CONN_REJ,NULL))
-- {
-- dapl_dbg_log ( DAPL_DBG_TYPE_ERR,
-- "--> DsRjC: private_data size(%d) > Max(%d)\n",
-- private_data_size, IB_MAX_REJ_PDATA_SIZE );
-- return DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
-- }
--
- cm_rej.p_rej_pdata = private_data;
- cm_rej.rej_length = private_data_size;
-
-@@ -1723,78 +1724,11 @@ dapls_ib_cr_handoff (
- }
- #endif
-
--/*
-- * dapls_ib_private_data_size
-- *
-- * Return the size of private data given a connection op type
-- *
-- * Input:
-- * prd_ptr private data pointer
-- * conn_op connection operation type
-- * hca_ptr hca pointer, needed for transport type
-- *
-- * If prd_ptr is NULL, this is a query for the max size supported by
-- * the provider, otherwise it is the actual size of the private data
-- * contained in prd_ptr.
-- *
-- * Infiniband has fixed size private data, so prd_ptr is ignored.
-- *
-- * Output:
-- * None
-- *
-- * Returns:
-- * length of private data
-- *
-- */
- int
- dapls_ib_private_data_size (
-- IN DAPL_PRIVATE *prd_ptr,
-- IN DAPL_PDATA_OP conn_op,
- IN DAPL_HCA *hca_ptr)
- {
-- int size;
--
-- UNUSED_PARAM( prd_ptr );
-- UNUSED_PARAM( hca_ptr );
--
-- switch (conn_op)
-- {
-- case DAPL_PDATA_CONN_REQ:
-- {
-- size = IB_MAX_REQ_PDATA_SIZE;
-- break;
-- }
-- case DAPL_PDATA_CONN_REP:
-- {
-- size = IB_MAX_REP_PDATA_SIZE;
-- break;
-- }
-- case DAPL_PDATA_CONN_REJ:
-- {
-- size = IB_MAX_REJ_PDATA_SIZE;
-- break;
-- }
-- case DAPL_PDATA_CONN_DREQ:
-- {
-- size = IB_MAX_DREQ_PDATA_SIZE;
-- break;
-- }
-- case DAPL_PDATA_CONN_DREP:
-- {
-- size = IB_MAX_DREP_PDATA_SIZE;
-- break;
-- }
-- default:
-- {
-- size = 0;
-- }
-- } /* end case */
--
--#if defined(DAPL_DBG) && 0
-- dapl_dbg_log (DAPL_DBG_TYPE_CM, "%s: returns %d\n", __FUNCTION__, size );
--#endif
--
-- return size;
-+ return IB_MAX_REQ_PDATA_SIZE;
- }
-
-
-diff --git a/trunk/ulp/dapl2/dapl/openib_cma/cm.c b/trunk/ulp/dapl2/dapl/openib_cma/cm.c
-index c52e716..e0e034b 100644
---- a/trunk/ulp/dapl2/dapl/openib_cma/cm.c
-+++ b/trunk/ulp/dapl2/dapl/openib_cma/cm.c
-@@ -95,7 +95,7 @@ static void dapli_addr_resolve(struct dapl_cm_id *conn)
- ret, strerror(errno));
- dapl_evd_connection_callback(conn,
- IB_CME_LOCAL_FAILURE,
-- NULL, conn->ep);
-+ NULL, 0, conn->ep);
- }
- }
-
-@@ -149,7 +149,7 @@ static void dapli_route_resolve(struct dapl_cm_id *conn)
-
- bail:
- dapl_evd_connection_callback(conn,
-- IB_CME_LOCAL_FAILURE, NULL, conn->ep);
-+ IB_CME_LOCAL_FAILURE, NULL, 0, conn->ep);
- }
-
- dp_ib_cm_handle_t dapls_ib_cm_create(DAPL_EP *ep)
-@@ -416,7 +416,8 @@ static void dapli_cm_active_cb(struct dapl_cm_id *conn,
-
- dapl_os_unlock(lock);
- if (conn)
-- dapl_evd_connection_callback(conn, ib_cm_event, pdata, conn->ep);
-+ dapl_evd_connection_callback(conn, ib_cm_event, pdata,
-+ event->param.conn.private_data_len, conn->ep);
- }
-
- static void dapli_cm_passive_cb(struct dapl_cm_id *conn,
-@@ -496,7 +497,8 @@ static void dapli_cm_passive_cb(struct dapl_cm_id *conn,
-
- dapl_os_unlock(&conn->lock);
- if (conn_recv)
-- dapls_cr_callback(conn_recv, ib_cm_event, pdata, conn_recv->sp);
-+ dapls_cr_callback(conn_recv, ib_cm_event, pdata,
-+ event->param.conn.private_data_len, conn_recv->sp);
- }
-
- /************************ DAPL provider entry points **********************/
-@@ -922,11 +924,6 @@ dapls_ib_reject_connection(IN dp_ib_cm_handle_t cm_handle,
- return DAT_ERROR(DAT_INVALID_HANDLE, DAT_INVALID_HANDLE_CR);
- }
-
-- if (private_data_size >
-- dapls_ib_private_data_size(NULL, DAPL_PDATA_CONN_REJ,
-- cm_handle->hca))
-- return DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG3);
--
- /* setup pdata_hdr and users data, in CR pdata buffer */
- dapl_os_memcpy(cm_handle->p_data, &pdata_hdr, offset);
- if (private_data_size)
-@@ -998,60 +995,10 @@ dapls_ib_cm_remote_addr(IN DAT_HANDLE dat_handle, OUT DAT_SOCK_ADDR6 * raddr)
- return DAT_SUCCESS;
- }
-
--/*
-- * dapls_ib_private_data_size
-- *
-- * Return the size of private data given a connection op type
-- *
-- * Input:
-- * prd_ptr private data pointer
-- * conn_op connection operation type
-- * hca_ptr hca pointer, needed for transport type
-- *
-- * If prd_ptr is NULL, this is a query for the max size supported by
-- * the provider, otherwise it is the actual size of the private data
-- * contained in prd_ptr.
-- *
-- *
-- * Output:
-- * None
-- *
-- * Returns:
-- * length of private data
-- *
-- */
--int dapls_ib_private_data_size(IN DAPL_PRIVATE * prd_ptr,
-- IN DAPL_PDATA_OP conn_op, IN DAPL_HCA * hca_ptr)
-+int dapls_ib_private_data_size(
-+ IN DAPL_HCA *hca_ptr)
- {
-- int size;
--
-- if (hca_ptr->ib_hca_handle->device->transport_type
-- == IBV_TRANSPORT_IWARP)
-- return (IWARP_MAX_PDATA_SIZE - sizeof(struct dapl_pdata_hdr));
--
-- switch (conn_op) {
--
-- case DAPL_PDATA_CONN_REQ:
-- size = IB_MAX_REQ_PDATA_SIZE;
-- break;
-- case DAPL_PDATA_CONN_REP:
-- size = IB_MAX_REP_PDATA_SIZE;
-- break;
-- case DAPL_PDATA_CONN_REJ:
-- size = IB_MAX_REJ_PDATA_SIZE - sizeof(struct dapl_pdata_hdr);
-- break;
-- case DAPL_PDATA_CONN_DREQ:
-- size = IB_MAX_DREQ_PDATA_SIZE;
-- break;
-- case DAPL_PDATA_CONN_DREP:
-- size = IB_MAX_DREP_PDATA_SIZE;
-- break;
-- default:
-- size = 0;
--
-- } /* end case */
--
-- return size;
-+ return RDMA_MAX_PRIVATE_DATA;
- }
-
- /*
-@@ -1238,7 +1185,7 @@ void dapli_cma_event_cb(void)
-
- dapl_evd_connection_callback(conn,
- IB_CME_DESTINATION_UNREACHABLE,
-- NULL, conn->ep);
-+ NULL, 0, conn->ep);
- break;
-
- case RDMA_CM_EVENT_ROUTE_ERROR:
-@@ -1267,14 +1214,14 @@ void dapli_cma_event_cb(void)
-
- dapl_evd_connection_callback(conn,
- IB_CME_DESTINATION_UNREACHABLE,
-- NULL, conn->ep);
-+ NULL, 0, conn->ep);
- }
- break;
-
- case RDMA_CM_EVENT_DEVICE_REMOVAL:
- dapl_evd_connection_callback(conn,
- IB_CME_LOCAL_FAILURE,
-- NULL, conn->ep);
-+ NULL, 0, conn->ep);
- break;
- case RDMA_CM_EVENT_CONNECT_REQUEST:
- case RDMA_CM_EVENT_CONNECT_ERROR:
-diff --git a/trunk/ulp/dapl2/dapl/openib_scm/cm.c b/trunk/ulp/dapl2/dapl/openib_scm/cm.c
-index 105351c..4ac54dc 100644
---- a/trunk/ulp/dapl2/dapl/openib_scm/cm.c
-+++ b/trunk/ulp/dapl2/dapl/openib_scm/cm.c
-@@ -430,12 +430,12 @@ DAT_RETURN dapli_socket_disconnect(dp_ib_cm_handle_t cm_ptr)
- if (ep_ptr->cr_ptr) {
- dapls_cr_callback(cm_ptr,
- IB_CME_DISCONNECTED,
-- NULL,
-+ NULL, 0,
- ((DAPL_CR *) ep_ptr->cr_ptr)->sp_ptr);
- } else {
- dapl_evd_connection_callback(ep_ptr->cm_handle,
- IB_CME_DISCONNECTED,
-- NULL, ep_ptr);
-+ NULL, 0, ep_ptr);
- }
- }
-
-@@ -506,7 +506,7 @@ static void dapli_socket_connected(dp_ib_cm_handle_t cm_ptr, int err)
- bail:
- /* close socket, free cm structure and post error event */
- dapls_ib_cm_free(cm_ptr, cm_ptr->ep);
-- dapl_evd_connection_callback(NULL, IB_CME_LOCAL_FAILURE, NULL, ep_ptr);
-+ dapl_evd_connection_callback(NULL, IB_CME_LOCAL_FAILURE, NULL, 0, ep_ptr);
- }
-
- /*
-@@ -833,7 +833,8 @@ ud_bail:
- #endif
- {
- ep_ptr->cm_handle = cm_ptr; /* only RC, multi CR's on UD */
-- dapl_evd_connection_callback(cm_ptr, event, cm_ptr->msg.p_data, ep_ptr);
-+ dapl_evd_connection_callback(cm_ptr, event, cm_ptr->msg.p_data,
-+ DCM_MAX_PDATA_SIZE, ep_ptr);
- }
- return;
-
-@@ -847,7 +848,8 @@ bail:
- dapls_modify_qp_state(ep_ptr->qp_handle, IBV_QPS_ERR, 0, 0, 0);
- closesocket(cm_ptr->socket);
- cm_ptr->socket = DAPL_INVALID_SOCKET;
-- dapl_evd_connection_callback(NULL, event, cm_ptr->msg.p_data, ep_ptr);
-+ dapl_evd_connection_callback(NULL, event, cm_ptr->msg.p_data,
-+ DCM_MAX_PDATA_SIZE, ep_ptr);
- }
-
- /*
-@@ -1044,7 +1046,7 @@ static void dapli_socket_accept_data(ib_cm_srvc_handle_t acm_ptr)
- /* trigger CR event and return SUCCESS */
- dapls_cr_callback(acm_ptr,
- IB_CME_CONNECTION_REQUEST_PENDING,
-- p_data, acm_ptr->sp);
-+ p_data, exp, acm_ptr->sp);
- return;
- bail:
- /* close socket, free cm structure, active will see close as rej */
-@@ -1274,7 +1276,7 @@ ud_bail:
- #endif
- {
- cm_ptr->ep->cm_handle = cm_ptr; /* only RC, multi CR's on UD */
-- dapls_cr_callback(cm_ptr, event, NULL, cm_ptr->sp);
-+ dapls_cr_callback(cm_ptr, event, NULL, 0, cm_ptr->sp);
- }
- return;
-
-@@ -1285,7 +1287,7 @@ bail:
- #endif
- dapls_modify_qp_state(cm_ptr->ep->qp_handle, IBV_QPS_ERR, 0, 0, 0);
- dapls_ib_cm_free(cm_ptr, cm_ptr->ep);
-- dapls_cr_callback(cm_ptr, event, NULL, cm_ptr->sp);
-+ dapls_cr_callback(cm_ptr, event, NULL, 0, cm_ptr->sp);
- }
-
- /*
-@@ -1604,44 +1606,10 @@ dapls_ib_cm_remote_addr(IN DAT_HANDLE dat_handle,
- return DAT_SUCCESS;
- }
-
--/*
-- * dapls_ib_private_data_size
-- *
-- * Return the size of private data given a connection op type
-- *
-- * Input:
-- * prd_ptr private data pointer
-- * conn_op connection operation type
-- *
-- * If prd_ptr is NULL, this is a query for the max size supported by
-- * the provider, otherwise it is the actual size of the private data
-- * contained in prd_ptr.
-- *
-- *
-- * Output:
-- * None
-- *
-- * Returns:
-- * length of private data
-- *
-- */
--int dapls_ib_private_data_size(IN DAPL_PRIVATE * prd_ptr,
-- IN DAPL_PDATA_OP conn_op, IN DAPL_HCA * hca_ptr)
-+int dapls_ib_private_data_size(
-+ IN DAPL_HCA *hca_ptr)
- {
-- int size;
--
-- switch (conn_op) {
-- case DAPL_PDATA_CONN_REQ:
-- case DAPL_PDATA_CONN_REP:
-- case DAPL_PDATA_CONN_REJ:
-- case DAPL_PDATA_CONN_DREQ:
-- case DAPL_PDATA_CONN_DREP:
-- size = DCM_MAX_PDATA_SIZE;
-- break;
-- default:
-- size = 0;
-- }
-- return size;
-+ return DCM_MAX_PDATA_SIZE;
- }
-
- /*
-diff --git a/trunk/ulp/dapl2/dapl/openib_ucm/cm.c b/trunk/ulp/dapl2/dapl/openib_ucm/cm.c
-index b51556a..d05d112 100644
---- a/trunk/ulp/dapl2/dapl/openib_ucm/cm.c
-+++ b/trunk/ulp/dapl2/dapl/openib_ucm/cm.c
-@@ -798,9 +798,9 @@ static void ucm_disconnect_final(dp_ib_cm_handle_t cm)
- dapl_os_unlock(&cm->lock);
-
- if (cm->sp)
-- dapls_cr_callback(cm, IB_CME_DISCONNECTED, NULL, cm->sp);
-+ dapls_cr_callback(cm, IB_CME_DISCONNECTED, NULL, 0, cm->sp);
- else
-- dapl_evd_connection_callback(cm, IB_CME_DISCONNECTED, NULL, cm->ep);
-+ dapl_evd_connection_callback(cm, IB_CME_DISCONNECTED, NULL, 0, cm->ep);
- }
-
- /*
-@@ -911,7 +911,7 @@ dapli_cm_connect(DAPL_EP *ep, dp_ib_cm_handle_t cm)
- #endif
- dapl_evd_connection_callback(cm,
- IB_CME_DESTINATION_UNREACHABLE,
-- NULL, ep);
-+ NULL, 0, ep);
-
- return DAT_ERROR(DAT_INVALID_ADDRESS,
- DAT_INVALID_ADDRESS_UNREACHABLE);
-@@ -1126,14 +1126,14 @@ ud_bail:
- cm->ep->cm_handle = cm; /* only RC, multi CR's on UD */
- dapl_evd_connection_callback(cm,
- IB_CME_CONNECTED,
-- cm->msg.p_data, cm->ep);
-+ cm->msg.p_data, ntohs(cm->msg.p_size), cm->ep);
- }
- return;
- bail:
- if (cm->msg.saddr.ib.qp_type != IBV_QPT_UD)
- dapls_ib_reinit_ep(cm->ep); /* reset QP state */
-
-- dapl_evd_connection_callback(NULL, event, cm->msg.p_data, cm->ep);
-+ dapl_evd_connection_callback(NULL, event, cm->msg.p_data, ntohs(cm->msg.p_size), cm->ep);
- dapls_ib_cm_free(cm, NULL);
- }
-
-@@ -1204,7 +1204,7 @@ static void ucm_accept(ib_cm_srvc_handle_t cm, ib_cm_msg_t *msg)
- /* trigger CR event and return SUCCESS */
- dapls_cr_callback(acm,
- IB_CME_CONNECTION_REQUEST_PENDING,
-- acm->msg.p_data, acm->sp);
-+ acm->msg.p_data, ntohs(msg->p_size), acm->sp);
- return;
-
- bail:
-@@ -1295,14 +1295,14 @@ static void ucm_accept_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg)
- } else {
- #endif
- cm->ep->cm_handle = cm; /* only RC, multi CR's on UD */
-- dapls_cr_callback(cm, IB_CME_CONNECTED, NULL, cm->sp);
-+ dapls_cr_callback(cm, IB_CME_CONNECTED, NULL, 0, cm->sp);
- }
- return;
- bail:
- if (cm->msg.saddr.ib.qp_type != IBV_QPT_UD)
- dapls_ib_reinit_ep(cm->ep); /* reset QP state */
- dapls_ib_cm_free(cm, cm->ep);
-- dapls_cr_callback(cm, IB_CME_LOCAL_FAILURE, NULL, cm->sp);
-+ dapls_cr_callback(cm, IB_CME_LOCAL_FAILURE, NULL, 0, cm->sp);
- }
-
- /*
-@@ -1354,7 +1354,7 @@ static int ucm_reply(dp_ib_cm_handle_t cm)
- } else
- #endif
- dapls_cr_callback(cm, IB_CME_LOCAL_FAILURE,
-- NULL, cm->sp);
-+ NULL, 0, cm->sp);
- return -1;
- }
- dapl_os_get_time(&cm->timer); /* RTU expected */
-@@ -1842,44 +1842,10 @@ dapls_ib_cm_remote_addr(IN DAT_HANDLE dat_handle,
- return DAT_SUCCESS;
- }
-
--/*
-- * dapls_ib_private_data_size
-- *
-- * Return the size of private data given a connection op type
-- *
-- * Input:
-- * prd_ptr private data pointer
-- * conn_op connection operation type
-- *
-- * If prd_ptr is NULL, this is a query for the max size supported by
-- * the provider, otherwise it is the actual size of the private data
-- * contained in prd_ptr.
-- *
-- *
-- * Output:
-- * None
-- *
-- * Returns:
-- * length of private data
-- *
-- */
--int dapls_ib_private_data_size(IN DAPL_PRIVATE * prd_ptr,
-- IN DAPL_PDATA_OP conn_op, IN DAPL_HCA * hca_ptr)
-+int dapls_ib_private_data_size(
-+ IN DAPL_HCA *hca_ptr)
- {
-- int size;
--
-- switch (conn_op) {
-- case DAPL_PDATA_CONN_REQ:
-- case DAPL_PDATA_CONN_REP:
-- case DAPL_PDATA_CONN_REJ:
-- case DAPL_PDATA_CONN_DREQ:
-- case DAPL_PDATA_CONN_DREP:
-- size = DCM_MAX_PDATA_SIZE;
-- break;
-- default:
-- size = 0;
-- }
-- return size;
-+ return DCM_MAX_PDATA_SIZE;
- }
-
- /*