Fixed incorrectly placed clean function in asym response. Fixes: 002486db239e ("crypto/qat: refactor asymmetric session")
Signed-off-by: Arek Kusztal <arkadiuszx.kusz...@intel.com> --- v2: - fixed compilation issues - split into 3 patches drivers/crypto/qat/qat_asym.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c index 19931791c4..3d7a800392 100644 --- a/drivers/crypto/qat/qat_asym.c +++ b/drivers/crypto/qat/qat_asym.c @@ -129,20 +129,23 @@ cleanup_crt(struct qat_asym_op_cookie *cookie, static void cleanup(struct qat_asym_op_cookie *cookie, - struct rte_crypto_asym_xform *xform, int alg_size) + struct rte_crypto_asym_xform *xform) { if (xform->xform_type == RTE_CRYPTO_ASYM_XFORM_MODEX) cleanup_arrays(cookie, QAT_ASYM_MODEXP_NUM_IN_PARAMS, - QAT_ASYM_MODEXP_NUM_OUT_PARAMS, alg_size); + QAT_ASYM_MODEXP_NUM_OUT_PARAMS, + cookie->alg_bytesize); else if (xform->xform_type == RTE_CRYPTO_ASYM_XFORM_MODINV) cleanup_arrays(cookie, QAT_ASYM_MODINV_NUM_IN_PARAMS, - QAT_ASYM_MODINV_NUM_OUT_PARAMS, alg_size); + QAT_ASYM_MODINV_NUM_OUT_PARAMS, + cookie->alg_bytesize); else if (xform->xform_type == RTE_CRYPTO_ASYM_XFORM_RSA) { if (xform->rsa.key_type == RTE_RSA_KEY_TYPE_QT) - cleanup_crt(cookie, alg_size); + cleanup_crt(cookie, cookie->alg_bytesize); else { cleanup_arrays(cookie, QAT_ASYM_RSA_NUM_IN_PARAMS, - QAT_ASYM_RSA_NUM_OUT_PARAMS, alg_size); + QAT_ASYM_RSA_NUM_OUT_PARAMS, + cookie->alg_bytesize); } } else { cleanup_arrays(cookie, QAT_ASYM_MAX_PARAMS, @@ -804,12 +807,13 @@ qat_asym_build_request(void *in_op, uint8_t *out_msg, void *op_cookie, op->asym->session->sess_private_data; int err = 0; + op->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED; if (unlikely(qat_session == NULL)) { QAT_DP_LOG(ERR, "Session was not created for this device"); + op->status = RTE_CRYPTO_OP_STATUS_INVALID_SESSION; goto error; } - op->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED; switch (op->sess_type) { case RTE_CRYPTO_OP_WITH_SESSION: request_init(qat_req); @@ -882,10 +886,11 @@ qat_asym_process_response(void **out_op, uint8_t *resp, struct rte_crypto_op *op = (struct rte_crypto_op *)(uintptr_t) (resp_msg->opaque); struct qat_asym_op_cookie *cookie = op_cookie; - struct rte_crypto_asym_xform *xform; + struct rte_crypto_asym_xform *xform = NULL; struct qat_asym_session *qat_session = (struct qat_asym_session *) op->asym->session->sess_private_data; + *out_op = op; if (cookie->error) { cookie->error = 0; if (op->status == RTE_CRYPTO_OP_STATUS_NOT_PROCESSED) @@ -917,17 +922,13 @@ qat_asym_process_response(void **out_op, uint8_t *resp, default: QAT_DP_LOG(ERR, "Invalid session/xform settings in response ring!"); - op->status = RTE_CRYPTO_OP_STATUS_INVALID_SESSION; - } - - if (op->status == RTE_CRYPTO_OP_STATUS_NOT_PROCESSED) { - op->status = qat_asym_collect_response(op, - cookie, xform); - cleanup(cookie, xform, cookie->alg_bytesize); + op->status = RTE_CRYPTO_OP_STATUS_ERROR; } - - *out_op = op; + if (op->status == RTE_CRYPTO_OP_STATUS_NOT_PROCESSED) + op->status = qat_asym_collect_response(op, cookie, xform); HEXDUMP("resp_msg:", resp_msg, sizeof(struct icp_qat_fw_pke_resp)); + if (likely(xform != NULL)) + cleanup(cookie, xform); return 1; } -- 2.13.6