[v2] crypto/qat: fix process type handling

Message ID 20220301150254.70458-1-kai.ji@intel.com (mailing list archive)
State Accepted, archived
Delegated to: akhil goyal
Headers
Series [v2] crypto/qat: fix process type handling |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot: build success github build: passed
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-abi-testing success Testing PASS

Commit Message

Ji, Kai March 1, 2022, 3:02 p.m. UTC
  This patch fix the memory corruptions issue reported by
coverity. The process type handling in QAT PMDs where only
primary and secondary process are supported in qat build
request.

Coverity issue: 376551, 376570, 376534
Fixes: b62d00d0d247 ("crypto/qat: rework burst data path")

Signed-off-by: Kai Ji <kai.ji@intel.com>
---
 drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c | 3 +++
 drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c | 3 +++
 drivers/crypto/qat/dev/qat_sym_pmd_gen1.c    | 3 +++
 drivers/crypto/qat/qat_sym.c                 | 8 ++++----
 4 files changed, 13 insertions(+), 4 deletions(-)
  

Comments

Akhil Goyal March 4, 2022, 10:29 a.m. UTC | #1
> This patch fix the memory corruptions issue reported by
> coverity. The process type handling in QAT PMDs where only
> primary and secondary process are supported in qat build
> request.
> 
> Coverity issue: 376551, 376570, 376534
> Fixes: b62d00d0d247 ("crypto/qat: rework burst data path")
> 
> Signed-off-by: Kai Ji <kai.ji@intel.com>
Applied to dpdk-next-crypto
  

Patch

diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c
index 5084a5fcd1..2d5f10aeac 100644
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c
@@ -358,6 +358,9 @@  qat_sym_crypto_set_session_gen3(void *cdev __rte_unused, void *session)
 	enum rte_proc_type_t proc_type = rte_eal_process_type();
 	int ret;
 
+	if (proc_type == RTE_PROC_AUTO || proc_type == RTE_PROC_INVALID)
+		return -EINVAL;
+
 	ret = qat_sym_crypto_set_session_gen1(cdev, session);
 	/* special single pass build request for GEN3 */
 	if (ctx->is_single_pass)
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
index bd7f3785df..3d8b2e377c 100644
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen4.c
@@ -189,6 +189,9 @@  qat_sym_crypto_set_session_gen4(void *cdev, void *session)
 	enum rte_proc_type_t proc_type = rte_eal_process_type();
 	int ret;
 
+	if (proc_type == RTE_PROC_AUTO || proc_type == RTE_PROC_INVALID)
+		return -EINVAL;
+
 	ret = qat_sym_crypto_set_session_gen1(cdev, session);
 	/* special single pass build request for GEN4 */
 	if (ctx->is_single_pass && ctx->is_ucs)
diff --git a/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c b/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c
index 3bcb53cf9f..99f5a22a06 100644
--- a/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c
+++ b/drivers/crypto/qat/dev/qat_sym_pmd_gen1.c
@@ -1149,6 +1149,9 @@  qat_sym_crypto_set_session_gen1(void *cryptodev __rte_unused, void *session)
 	enum rte_proc_type_t proc_type = rte_eal_process_type();
 	int handle_mixed = 0;
 
+	if (proc_type == RTE_PROC_AUTO || proc_type == RTE_PROC_INVALID)
+		return -EINVAL;
+
 	if ((ctx->qat_cmd == ICP_QAT_FW_LA_CMD_HASH_CIPHER ||
 			ctx->qat_cmd == ICP_QAT_FW_LA_CMD_CIPHER_HASH) &&
 			!ctx->is_gmac) {
diff --git a/drivers/crypto/qat/qat_sym.c b/drivers/crypto/qat/qat_sym.c
index 1ccffad5ab..ca8c9a8124 100644
--- a/drivers/crypto/qat/qat_sym.c
+++ b/drivers/crypto/qat/qat_sym.c
@@ -60,6 +60,10 @@  qat_sym_build_request(void *in_op, uint8_t *out_msg,
 	uintptr_t build_request_p = (uintptr_t)opaque[1];
 	qat_sym_build_request_t build_request = (void *)build_request_p;
 	struct qat_sym_session *ctx = NULL;
+	enum rte_proc_type_t proc_type = rte_eal_process_type();
+
+	if (proc_type == RTE_PROC_AUTO || proc_type == RTE_PROC_INVALID)
+		return -EINVAL;
 
 	if (likely(op->sess_type == RTE_CRYPTO_OP_WITH_SESSION)) {
 		ctx = get_sym_session_private_data(op->sym->session,
@@ -71,11 +75,9 @@  qat_sym_build_request(void *in_op, uint8_t *out_msg,
 		if (sess != (uintptr_t)ctx) {
 			struct rte_cryptodev *cdev;
 			struct qat_cryptodev_private *internals;
-			enum rte_proc_type_t proc_type;
 
 			cdev = rte_cryptodev_pmd_get_dev(ctx->dev_id);
 			internals = cdev->data->dev_private;
-			proc_type = rte_eal_process_type();
 
 			if (internals->qat_dev->qat_dev_gen != dev_gen) {
 				op->status =
@@ -105,7 +107,6 @@  qat_sym_build_request(void *in_op, uint8_t *out_msg,
 		if ((void *)sess != (void *)op->sym->sec_session) {
 			struct rte_cryptodev *cdev;
 			struct qat_cryptodev_private *internals;
-			enum rte_proc_type_t proc_type;
 
 			ctx = get_sec_session_private_data(
 					op->sym->sec_session);
@@ -130,7 +131,6 @@  qat_sym_build_request(void *in_op, uint8_t *out_msg,
 			}
 			cdev = rte_cryptodev_pmd_get_dev(ctx->dev_id);
 			internals = cdev->data->dev_private;
-			proc_type = rte_eal_process_type();
 
 			if (internals->qat_dev->qat_dev_gen != dev_gen) {
 				op->status =