X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fcrypto%2Fqat%2Fqat_sym.c;h=e6bf1152327e7f10a13005214d9992ab101e607c;hb=b34d816363b553a6098ef4647e91d5a02b66aca4;hp=55251d17169a964b01ac3048a8c5096b53e08157;hpb=6f0ef237404b6c1ef462fe134f0e74a387e49cac;p=dpdk.git diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c index 55251d1716..e6bf115232 100644 --- a/drivers/crypto/qat/qat_sym.c +++ b/drivers/crypto/qat/qat_sym.c @@ -108,18 +108,18 @@ qat_crc_generate(struct qat_sym_session *ctx, struct rte_crypto_op *op) { struct rte_crypto_sym_op *sym_op = op->sym; - uint32_t *crc, crc_length; + uint32_t *crc, crc_data_len; uint8_t *crc_data; if (ctx->qat_dir == ICP_QAT_HW_CIPHER_ENCRYPT && sym_op->auth.data.length != 0) { - crc_length = sym_op->auth.data.length; + crc_data_len = sym_op->auth.data.length; crc_data = rte_pktmbuf_mtod_offset(sym_op->m_src, uint8_t *, sym_op->auth.data.offset); - crc = (uint32_t *)(crc_data + crc_length); + crc = (uint32_t *)(crc_data + crc_data_len); - *crc = rte_net_crc_calc(crc_data, crc_length, + *crc = rte_net_crc_calc(crc_data, crc_data_len, RTE_NET_CRC32_ETH); } } @@ -206,7 +206,7 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg, return -EINVAL; } else if (op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) { ctx = (struct qat_sym_session *)get_sym_session_private_data( - op->sym->session, cryptodev_qat_driver_id); + op->sym->session, qat_sym_driver_id); #ifdef RTE_LIBRTE_SECURITY } else { ctx = (struct qat_sym_session *)get_sec_session_private_data( @@ -284,13 +284,15 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg, /* DOCSIS processing */ #ifdef RTE_LIBRTE_SECURITY if (is_docsis_sec) { - /* Check for OOP */ - if (unlikely((op->sym->m_dst != NULL) && + /* Check for OOP or multi-segment buffers */ + if (unlikely(((op->sym->m_dst != NULL) && (op->sym->m_dst != - op->sym->m_src))) { + op->sym->m_src)) || + op->sym->m_src->nb_segs > 1)) { QAT_DP_LOG(ERR, - "OOP not supported for DOCSIS " - "security"); + "OOP and/or multi-segment " + "buffers are not supported for " + "DOCSIS security"); op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS; return -EINVAL;