-----Original Message----- From: Akhil Goyal <akhil.go...@nxp.com> Sent: Friday, July 5, 2019 16:32 To: Fan Zhang <roy.fan.zh...@intel.com>; dev@dpdk.org; Liron Himi <lir...@marvell.com> Subject: [EXT] RE: [PATCH] crypto/mvsam: fix missed code change for mvsam
External Email ---------------------------------------------------------------------- Hi Liron, Following patch need to be merged today as it is fixing a build issue for a patch already merged. Could you please review this patch? Sorry for a very short notice. Thanks, Akhil > -----Original Message----- > From: Fan Zhang <roy.fan.zh...@intel.com> > Sent: Friday, July 5, 2019 6:54 PM > To: dev@dpdk.org > Cc: Akhil Goyal <akhil.go...@nxp.com>; Fan Zhang > <roy.fan.zh...@intel.com> > Subject: [PATCH] crypto/mvsam: fix missed code change for mvsam > > 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.zh...@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 Based on Fan's comments acked-by: Liron Himi <lir...@marvell.com>