diff options
author | Nithinsen Kaithakadan <nkaithakadan@marvell.com> | 2025-01-16 12:56:09 +0530 |
---|---|---|
committer | Damjan Marion <dmarion@0xa5.net> | 2025-01-21 12:58:20 +0000 |
commit | 07ba8ae1b292225b2a72798699a1ccba59c1fc3e (patch) | |
tree | 0f1d8cb8d8cb3635dac3438ea988faa27da89e71 /src/plugins | |
parent | 82f9167e4847a66bbe4334afc1cc115efef81973 (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.c | 24 | ||||
-rw-r--r-- | src/plugins/dev_octeon/crypto.h | 2 |
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; |