crypto: fix chained buffer integrity support 85/31585/5
authorBenoît Ganne <bganne@cisco.com>
Mon, 8 Mar 2021 09:22:51 +0000 (10:22 +0100)
committerFan Zhang <roy.fan.zhang@intel.com>
Thu, 29 Apr 2021 15:48:25 +0000 (15:48 +0000)
Type: fix

Change-Id: I984a3e577a4209e41d046eaf3a8eef8986dc6147
Signed-off-by: Benoît Ganne <bganne@cisco.com>
src/plugins/crypto_sw_scheduler/main.c
test/test_ipsec_esp.py

index 29f91b3..fa2611f 100644 (file)
@@ -170,7 +170,21 @@ cryptodev_sw_scheduler_sgl (vlib_main_t * vm,
        break;
     }
 
-  ASSERT (offset == 0 && len == 0);
+  ASSERT (offset == 0);
+  if (n_chunks && len)
+    {
+      /* Some async crypto users can use buffers in creative ways, let's allow
+       * some flexibility here...
+       * Current example is ESP decrypt with ESN in async mode: it will stash
+       * ESN at the end of the last buffer (if it can) because it must be part
+       * of the integrity check but it will not update the buffer length.
+       * Fixup the last operation chunk length if we have room.
+       */
+      ASSERT (vlib_buffer_space_left_at_end (vm, nb) >= len);
+      if (vlib_buffer_space_left_at_end (vm, nb) >= len)
+       ch->len += len;
+    }
+
   op->chunk_index = chunk_index;
   op->n_chunks = n_chunks;
 }
index acff595..95703f5 100644 (file)
@@ -21,7 +21,7 @@ from vpp_ip import DpoProto
 from vpp_papi import VppEnum
 
 NUM_PKTS = 67
-engines_supporting_chain_bufs = ["openssl"]
+engines_supporting_chain_bufs = ["openssl", "async"]
 engines = ["ia32", "ipsecmb", "openssl"]