From: Arek Kusztal Date: Thu, 21 Oct 2021 10:06:01 +0000 (+0100) Subject: crypto/qat: fix uncleared cookies after operation X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=867ba300f915291629c33b2eadf6a98564c622a0;p=dpdk.git crypto/qat: fix uncleared cookies after operation This commit fixes uncleared cookies issue when using RSA algorithm. Fixes: e2c5f4ea994c ("crypto/qat: support RSA in asym") Cc: stable@dpdk.org Signed-off-by: Arek Kusztal Acked-by: Fan Zhang --- diff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c index 983c639d68..f893508030 100644 --- a/drivers/crypto/qat/qat_asym.c +++ b/drivers/crypto/qat/qat_asym.c @@ -65,27 +65,45 @@ static size_t max_of(int n, ...) } static void qat_clear_arrays(struct qat_asym_op_cookie *cookie, - int in_count, int out_count, int in_size, int out_size) + int in_count, int out_count, int alg_size) { int i; for (i = 0; i < in_count; i++) - memset(cookie->input_array[i], 0x0, in_size); + memset(cookie->input_array[i], 0x0, alg_size); for (i = 0; i < out_count; i++) - memset(cookie->output_array[i], 0x0, out_size); + memset(cookie->output_array[i], 0x0, alg_size); +} + +static void qat_clear_arrays_crt(struct qat_asym_op_cookie *cookie, + int alg_size) +{ + int i; + + memset(cookie->input_array[0], 0x0, alg_size); + for (i = 1; i < QAT_ASYM_RSA_QT_NUM_IN_PARAMS; i++) + memset(cookie->input_array[i], 0x0, alg_size / 2); + for (i = 0; i < QAT_ASYM_RSA_NUM_OUT_PARAMS; i++) + memset(cookie->output_array[i], 0x0, alg_size); } static void qat_clear_arrays_by_alg(struct qat_asym_op_cookie *cookie, - enum rte_crypto_asym_xform_type alg, int in_size, int out_size) + struct rte_crypto_asym_xform *xform, int alg_size) { - if (alg == RTE_CRYPTO_ASYM_XFORM_MODEX) + if (xform->xform_type == RTE_CRYPTO_ASYM_XFORM_MODEX) qat_clear_arrays(cookie, QAT_ASYM_MODEXP_NUM_IN_PARAMS, - QAT_ASYM_MODEXP_NUM_OUT_PARAMS, in_size, - out_size); - else if (alg == RTE_CRYPTO_ASYM_XFORM_MODINV) + QAT_ASYM_MODEXP_NUM_OUT_PARAMS, alg_size); + else if (xform->xform_type == RTE_CRYPTO_ASYM_XFORM_MODINV) qat_clear_arrays(cookie, QAT_ASYM_MODINV_NUM_IN_PARAMS, - QAT_ASYM_MODINV_NUM_OUT_PARAMS, in_size, - out_size); + QAT_ASYM_MODINV_NUM_OUT_PARAMS, alg_size); + else if (xform->xform_type == RTE_CRYPTO_ASYM_XFORM_RSA) { + if (xform->rsa.key_type == RTE_RSA_KET_TYPE_QT) + qat_clear_arrays_crt(cookie, alg_size); + else { + qat_clear_arrays(cookie, QAT_ASYM_RSA_NUM_IN_PARAMS, + QAT_ASYM_RSA_NUM_OUT_PARAMS, alg_size); + } + } } static int qat_asym_check_nonzero(rte_crypto_param n) @@ -657,8 +675,7 @@ static void qat_asym_collect_response(struct rte_crypto_op *rx_op, } } } - qat_clear_arrays_by_alg(cookie, xform->xform_type, alg_size_in_bytes, - alg_size_in_bytes); + qat_clear_arrays_by_alg(cookie, xform, alg_size_in_bytes); } void