Looks  reasonable. One more review please.

Maxim.

On 11/19/2014 01:27 PM, [email protected] wrote:
From: Alexandru Badicioiu <[email protected]>

NULL session IV prevents using per operation IV (override_iv_ptr).
This fixes *_OVR_IV cunit tests segfaults.

Signed-off-by: Alexandru Badicioiu <[email protected]>
---
  platform/linux-generic/odp_crypto.c |   16 +++++++++-------
  1 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/platform/linux-generic/odp_crypto.c 
b/platform/linux-generic/odp_crypto.c
index 596c717..9ca2251 100644
--- a/platform/linux-generic/odp_crypto.c
+++ b/platform/linux-generic/odp_crypto.c
@@ -147,7 +147,7 @@ enum crypto_alg_err des_encrypt(odp_crypto_op_params_t 
*params,
  {
        uint8_t *data  = odp_packet_addr(params->out_pkt);
        uint32_t len   = params->cipher_range.length;
-       DES_cblock *iv;
+       DES_cblock *iv = NULL;
        DES_cblock iv_temp;
/*
@@ -155,8 +155,10 @@ enum crypto_alg_err des_encrypt(odp_crypto_op_params_t 
*params,
         * and if we are processing packets on parallel threads
         * we could get corruption.
         */
-       memcpy(iv_temp, session->cipher.iv.data, sizeof(iv_temp));
-       iv = &iv_temp;
+       if (session->cipher.iv.data) {
+               memcpy(iv_temp, session->cipher.iv.data, sizeof(iv_temp));
+               iv = &iv_temp;
+       }
/* Adjust pointer for beginning of area to cipher */
        data += params->cipher_range.offset;
@@ -165,6 +167,10 @@ enum crypto_alg_err des_encrypt(odp_crypto_op_params_t 
*params,
        if (params->override_iv_ptr)
                iv = (DES_cblock *)params->override_iv_ptr;
+ /* No session or operation IV */
+       if (!iv)
+               return ODP_CRYPTO_SES_CREATE_ERR_INV_CIPHER;
+
        /* Encrypt it */
        DES_ede3_cbc_encrypt(data,
                             data,
@@ -214,10 +220,6 @@ int process_des_params(odp_crypto_generic_session_t 
*session,
        if (!((0 == params->iv.length) || (8 == params->iv.length)))
                return -1;
- /* Verify IV pointer */
-       if (params->iv.length && !params->iv.data)
-               return -1;
-
        /* Set function */
        if (ODP_CRYPTO_OP_ENCODE == params->op)
                session->cipher.func = des_encrypt;


_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to