summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorNithinsen Kaithakadan <nkaithakadan@marvell.com>2025-01-16 12:56:09 +0530
committerDamjan Marion <dmarion@0xa5.net>2025-01-21 12:58:20 +0000
commit07ba8ae1b292225b2a72798699a1ccba59c1fc3e (patch)
tree0f1d8cb8d8cb3635dac3438ea988faa27da89e71 /src/plugins
parent82f9167e4847a66bbe4334afc1cc115efef81973 (diff)
octeon: fix for async crypto session init
This patch resolves segmentation fault that occurs during the initialization of an asynchronous crypto session when processing the first packet in the data path. And resolves compilation failures. Type: fix Change-Id: I60e4060c65741a445fe02f01b3c94f627534ecef Signed-off-by: Nithinsen Kaithakadan <nkaithakadan@marvell.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/dev_octeon/crypto.c24
-rw-r--r--src/plugins/dev_octeon/crypto.h2
2 files changed, 16 insertions, 10 deletions
diff --git a/src/plugins/dev_octeon/crypto.c b/src/plugins/dev_octeon/crypto.c
index df6670e2eab..7333da1119e 100644
--- a/src/plugins/dev_octeon/crypto.c
+++ b/src/plugins/dev_octeon/crypto.c
@@ -1181,7 +1181,7 @@ oct_crypto_link_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
key = vnet_crypto_get_key (key_index);
- switch (key->async_alg)
+ switch (key->alg)
{
case VNET_CRYPTO_ALG_AES_128_CBC_SHA1_TAG12:
case VNET_CRYPTO_ALG_AES_192_CBC_SHA1_TAG12:
@@ -1264,8 +1264,8 @@ oct_crypto_link_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
break;
default:
clib_warning (
- "Cryptodev: Undefined link algo %u specified. Key index %u",
- key->async_alg, key_index);
+ "Cryptodev: Undefined link algo %u specified. Key index %u", key->alg,
+ key_index);
return -1;
}
@@ -1279,7 +1279,7 @@ oct_crypto_link_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
crypto_key = vnet_crypto_get_key (key->index_crypto);
rv = roc_se_ciph_key_set (&sess->cpt_ctx, enc_type, crypto_key->data,
- vec_len (crypto_key->data));
+ crypto_key->length);
if (rv)
{
clib_warning ("Cryptodev: Error in setting cipher key for enc type %u",
@@ -1290,7 +1290,7 @@ oct_crypto_link_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
auth_key = vnet_crypto_get_key (key->index_integ);
rv = roc_se_auth_key_set (&sess->cpt_ctx, auth_type, auth_key->data,
- vec_len (auth_key->data), digest_len);
+ auth_key->length, digest_len);
if (rv)
{
clib_warning ("Cryptodev: Error in setting auth key for auth type %u",
@@ -1311,7 +1311,7 @@ oct_crypto_aead_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
u32 digest_len = ~0;
i32 rv = 0;
- switch (key->async_alg)
+ switch (key->alg)
{
case VNET_CRYPTO_ALG_AES_128_GCM:
case VNET_CRYPTO_ALG_AES_192_GCM:
@@ -1331,7 +1331,7 @@ oct_crypto_aead_session_update (vlib_main_t *vm, oct_crypto_sess_t *sess,
default:
clib_warning (
"Cryptodev: Undefined cipher algo %u specified. Key index %u",
- key->async_alg, key_index);
+ key->alg, key_index);
return -1;
}
@@ -1422,7 +1422,7 @@ oct_crypto_enqueue_enc_dec (vlib_main_t *vm, vnet_crypto_async_frame_t *frame,
oct_crypto_key_t *key;
vlib_buffer_t *buffer;
u16 adj_len;
- int ret;
+ int ret = 0;
/* GCM packets having 8 bytes of aad and 8 bytes of iv */
u8 aad_iv = 8 + 8;
@@ -1458,7 +1458,13 @@ oct_crypto_enqueue_enc_dec (vlib_main_t *vm, vnet_crypto_async_frame_t *frame,
sess = key->sess;
if (PREDICT_FALSE (!sess->initialised))
- oct_crypto_session_init (vm, sess, elts->key_index, type);
+ ret = oct_crypto_session_init (vm, sess, elts->key_index, type);
+ if (ret)
+ {
+ oct_crypto_update_frame_error_status (
+ frame, i, VNET_CRYPTO_OP_STATUS_FAIL_ENGINE_ERR);
+ return -1;
+ }
crypto_dev = sess->crypto_dev;
diff --git a/src/plugins/dev_octeon/crypto.h b/src/plugins/dev_octeon/crypto.h
index 0a3b796d3dd..bee2db8f9ed 100644
--- a/src/plugins/dev_octeon/crypto.h
+++ b/src/plugins/dev_octeon/crypto.h
@@ -143,7 +143,7 @@ typedef struct
typedef struct
{
oct_crypto_dev_t *crypto_dev[OCT_MAX_N_CPT_DEV];
- oct_crypto_key_t *keys[VNET_CRYPTO_ASYNC_OP_N_TYPES];
+ oct_crypto_key_t *keys[VNET_CRYPTO_OP_N_TYPES];
oct_crypto_pending_queue_t *pend_q;
int n_cpt;
u8 started;