DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] crypto/mvsam: fix missed code change for mvsam
@ 2019-07-05 13:23 Fan Zhang
  2019-07-05 13:28 ` Akhil Goyal
  2019-07-05 13:31 ` Akhil Goyal
  0 siblings, 2 replies; 10+ messages in thread
From: Fan Zhang @ 2019-07-05 13:23 UTC (permalink / raw)
  To: dev; +Cc: akhil.goyal, Fan Zhang

This patch fixes the missed "uint8_t *" to "const uint8_t *" xform
key data type change for mvsam driver.

Fixes: f3390532cf6a ("cryptodev: make xform key pointer constant")

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
---
 drivers/crypto/mvsam/rte_mrvl_pmd.c     | 44 ++++++++++++++++++++++++++++++---
 drivers/crypto/mvsam/rte_mrvl_pmd_ops.c |  9 +++++++
 2 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd.c b/drivers/crypto/mvsam/rte_mrvl_pmd.c
index c2ae82a26..65e4769f2 100644
--- a/drivers/crypto/mvsam/rte_mrvl_pmd.c
+++ b/drivers/crypto/mvsam/rte_mrvl_pmd.c
@@ -222,6 +222,8 @@ static int
 mrvl_crypto_set_cipher_session_parameters(struct mrvl_crypto_session *sess,
 		const struct rte_crypto_sym_xform *cipher_xform)
 {
+	uint8_t *cipher_key;
+
 	/* Make sure we've got proper struct */
 	if (cipher_xform->type != RTE_CRYPTO_SYM_XFORM_CIPHER) {
 		MRVL_LOG(ERR, "Wrong xform struct provided!");
@@ -256,8 +258,17 @@ mrvl_crypto_set_cipher_session_parameters(struct mrvl_crypto_session *sess,
 		return -EINVAL;
 	}
 
+	cipher_key = malloc(cipher_xform->cipher.key.length);
+	if (cipher_key == NULL) {
+		MRVL_LOG(ERR, "Insufficient memory!");
+		return -ENOMEM;
+	}
+
+	memcpy(cipher_key, cipher_xform->cipher.key,
+			cipher_xform->cipher.key.length);
+
 	sess->sam_sess_params.cipher_key_len = cipher_xform->cipher.key.length;
-	sess->sam_sess_params.cipher_key = cipher_xform->cipher.key.data;
+	sess->sam_sess_params.cipher_key = cipher_key;
 
 	return 0;
 }
@@ -273,6 +284,8 @@ static int
 mrvl_crypto_set_auth_session_parameters(struct mrvl_crypto_session *sess,
 		const struct rte_crypto_sym_xform *auth_xform)
 {
+	uint8_t *auth_key = NULL;
+
 	/* Make sure we've got proper struct */
 	if (auth_xform->type != RTE_CRYPTO_SYM_XFORM_AUTH) {
 		MRVL_LOG(ERR, "Wrong xform struct provided!");
@@ -293,9 +306,21 @@ mrvl_crypto_set_auth_session_parameters(struct mrvl_crypto_session *sess,
 		auth_map[auth_xform->auth.algo].auth_alg;
 	sess->sam_sess_params.u.basic.auth_icv_len =
 		auth_xform->auth.digest_length;
+
+	if (auth_xform->auth.key.length > 0) {
+		auth_key = malloc(auth_xform->auth.key.length);
+		if (auth_key == NULL) {
+			MRVL_LOG(ERR, "Not enough memory!");
+			return -EINVAL;
+		}
+
+		memcpy(auth_key, auth_xform->auth.key.data,
+				auth_xform->auth.key.length);
+	}
+
+
 	/* auth_key must be NULL if auth algorithm does not use HMAC */
-	sess->sam_sess_params.auth_key = auth_xform->auth.key.length ?
-					 auth_xform->auth.key.data : NULL;
+	sess->sam_sess_params.auth_key = auth_key;
 	sess->sam_sess_params.auth_key_len = auth_xform->auth.key.length;
 
 	return 0;
@@ -312,6 +337,8 @@ static int
 mrvl_crypto_set_aead_session_parameters(struct mrvl_crypto_session *sess,
 		const struct rte_crypto_sym_xform *aead_xform)
 {
+	uint8_t *aead_key;
+
 	/* Make sure we've got proper struct */
 	if (aead_xform->type != RTE_CRYPTO_SYM_XFORM_AEAD) {
 		MRVL_LOG(ERR, "Wrong xform struct provided!");
@@ -344,7 +371,16 @@ mrvl_crypto_set_aead_session_parameters(struct mrvl_crypto_session *sess,
 		return -EINVAL;
 	}
 
-	sess->sam_sess_params.cipher_key = aead_xform->aead.key.data;
+	aead_key = malloc(aead_xform->aead.key.length);
+	if (aead_key == NULL) {
+		MRVL_LOG(ERR, "Insufficient memory!");
+		return -ENOMEM;
+	}
+
+	memcpy(aead_key, aead_xform->aead.key.data,
+			aead_xform->aead.key.length);
+
+	sess->sam_sess_params.cipher_key = aead_key;
 	sess->sam_sess_params.cipher_key_len = aead_xform->aead.key.length;
 
 	if (sess->sam_sess_params.cipher_mode == SAM_CIPHER_GCM)
diff --git a/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c b/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c
index f6bf2cd4c..b334c7694 100644
--- a/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c
+++ b/drivers/crypto/mvsam/rte_mrvl_pmd_ops.c
@@ -751,6 +751,8 @@ mrvl_crypto_pmd_sym_session_configure(__rte_unused struct rte_cryptodev *dev,
 		return -ENOMEM;
 	}
 
+	memset(sess_private_data, 0, sizeof(struct mrvl_crypto_session));
+
 	ret = mrvl_crypto_set_session_parameters(sess_private_data, xform);
 	if (ret != 0) {
 		MRVL_LOG(ERR, "Failed to configure session parameters!");
@@ -769,6 +771,13 @@ mrvl_crypto_pmd_sym_session_configure(__rte_unused struct rte_cryptodev *dev,
 		return -EIO;
 	}
 
+	/* free the keys memory allocated for session creation */
+	if (mrvl_sess->sam_sess_params.cipher_key != NULL)
+		free(mrvl_sess->sam_sess_params.cipher_key);
+	if (mrvl_sess->sam_sess_params.auth_key != NULL)
+		free(mrvl_sess->sam_sess_params.auth_key);
+
+
 	return 0;
 }
 
-- 
2.14.5


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-07-15 12:45 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-05 13:23 [dpdk-dev] [PATCH] crypto/mvsam: fix missed code change for mvsam Fan Zhang
2019-07-05 13:28 ` Akhil Goyal
2019-07-05 13:57   ` Zhang, Roy Fan
2019-07-05 13:31 ` Akhil Goyal
2019-07-07  5:41   ` Liron Himi
2019-07-08 10:26     ` Thomas Monjalon
2019-07-08 10:31       ` Akhil Goyal
2019-07-08 15:22       ` Thomas Monjalon
2019-07-12  6:31         ` Akhil Goyal
2019-07-15 12:45           ` Akhil Goyal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).