]> git.droids-corp.org - dpdk.git/commitdiff
crypto/ipsec_mb: fix GMAC parameters setting
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Wed, 9 Mar 2022 10:45:14 +0000 (10:45 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 14 Mar 2022 09:51:47 +0000 (10:51 +0100)
AES-GMAC requires plaintext length to be 0 when using AES-GCM,
so only AAD data is used.

Fixes: a501609ea646 ("crypto/ipsec_mb: fix length and offset settings")
Cc: stable@dpdk.org
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Radu Nicolau <radu.nicolau@intel.com>
Tested-by: Radu Nicolau <radu.nicolau@intel.com>
drivers/crypto/ipsec_mb/pmd_aesni_mb.c

index c97488603247295627f306b2668642fcf518bfc3..afa0b6e3a4a742bb703781bfb8659fd47206cc1d 100644 (file)
@@ -1296,9 +1296,9 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
                                        op->sym->aead.data.offset;
                        job->msg_len_to_hash_in_bytes =
                                        op->sym->aead.data.length;
-               } else {
-                       job->msg_len_to_cipher_in_bytes = 0;
+               } else { /* AES-GMAC only, only AAD used */
                        job->msg_len_to_hash_in_bytes = 0;
+                       job->hash_start_src_offset_in_bytes = 0;
                }
 
                job->iv = rte_crypto_op_ctod_offset(op, uint8_t *,
@@ -1378,8 +1378,18 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
                job->msg_len_to_cipher_in_bits =
                                        op->sym->cipher.data.length;
                break;
-       case IMB_CIPHER_CCM:
        case IMB_CIPHER_GCM:
+               if (session->cipher.mode == IMB_CIPHER_NULL) {
+                       /* AES-GMAC only (only AAD used) */
+                       job->msg_len_to_cipher_in_bytes = 0;
+                       job->cipher_start_src_offset_in_bytes = 0;
+               } else {
+                       job->cipher_start_src_offset_in_bytes =
+                                       op->sym->aead.data.offset;
+                       job->msg_len_to_cipher_in_bytes = op->sym->aead.data.length;
+               }
+               break;
+       case IMB_CIPHER_CCM:
        case IMB_CIPHER_CHACHA20_POLY1305:
                job->cipher_start_src_offset_in_bytes =
                                op->sym->aead.data.offset;