DAPL expects the private data size to be up to 256 bytes, but on windows the private data size is limited to 56 bytes. As a result, DAPL can access memory beyond the end of what's allocated.
A more 'correct' fix is being submitted upstream to dapl. This is a simpler fix for the Windows 2.2 release only. Signed-off-by: Sean Hefty <[email protected]> --- This is for 2.2 only. trunk/ulp/dapl2/dapl/openib_cma/cm.c | 30 +----------------------------- 1 files changed, 1 insertions(+), 29 deletions(-) diff --git a/trunk/ulp/dapl2/dapl/openib_cma/cm.c b/trunk/ulp/dapl2/dapl/openib_cma/cm.c index c52e716..0212c0e 100644 --- a/trunk/ulp/dapl2/dapl/openib_cma/cm.c +++ b/trunk/ulp/dapl2/dapl/openib_cma/cm.c @@ -1023,35 +1023,7 @@ dapls_ib_cm_remote_addr(IN DAT_HANDLE dat_handle, OUT DAT_SOCK_ADDR6 * raddr) int dapls_ib_private_data_size(IN DAPL_PRIVATE * prd_ptr, IN DAPL_PDATA_OP conn_op, 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; } /* _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
