crypto: fix bad-hmac in sw scheduler if async mode
[vpp.git] / src / plugins / crypto_sw_scheduler / main.c
index 8f27fef..980fa14 100644 (file)
@@ -88,10 +88,8 @@ crypto_sw_scheduler_frame_enqueue (vlib_main_t * vm,
       u32 n_elts = frame->n_elts, i;
       for (i = 0; i < n_elts; i++)
        frame->elts[i].status = VNET_CRYPTO_OP_STATUS_FAIL_ENGINE_ERR;
-      frame->state = VNET_CRYPTO_FRAME_STATE_ELT_ERROR;
       return -1;
     }
-  frame->state = VNET_CRYPTO_FRAME_STATE_NOT_PROCESSED;
   q->jobs[head & CRYPTO_SW_SCHEDULER_QUEUE_MASK] = frame;
   head += 1;
   CLIB_MEMORY_STORE_BARRIER ();
@@ -257,6 +255,7 @@ crypto_sw_scheduler_convert_link_crypto (vlib_main_t * vm,
   integ_op->digest = fe->digest;
   integ_op->digest_len = digest_len;
   integ_op->key_index = key->index_integ;
+  crypto_op->flags = integ_op->flags = 0;
   if (is_enc)
     crypto_op->flags |= VNET_CRYPTO_OP_FLAG_INIT_IV;
   else
@@ -543,7 +542,7 @@ sw_scheduler_show_workers (vlib_main_t * vm, unformat_input_t * input,
   u32 i;
 
   vlib_cli_output (vm, "%-7s%-20s%-8s", "ID", "Name", "Crypto");
-  for (i = vlib_num_workers () >= 0; i < vlib_thread_main.n_vlib_mains; i++)
+  for (i = 1; i < vlib_thread_main.n_vlib_mains; i++)
     {
       vlib_cli_output (vm, "%-7d%-20s%-8s", vlib_get_worker_index (i),
                       (vlib_worker_threads + i)->name,
@@ -659,6 +658,8 @@ crypto_sw_scheduler_init (vlib_main_t * vm)
   vnet_crypto_register_key_handler (vm, cm->crypto_engine_index,
                                    crypto_sw_scheduler_key_handler);
 
+  crypto_sw_scheduler_api_init (vm);
+
   /* *INDENT-OFF* */
 #define _(n, s, k, t, a)                                                      \
   vnet_crypto_register_async_handler (                                        \