patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: stable@dpdk.org
Cc: Kevin Traynor <ktraynor@redhat.com>, pablo.de.lara.guarch@intel.com
Subject: [PATCH 21.11] Revert "crypto/ipsec_mb: fix length and offset settings"
Date: Mon, 21 Mar 2022 15:35:27 +0000	[thread overview]
Message-ID: <20220321153527.67663-1-ktraynor@redhat.com> (raw)

This reverts commit daf06c45e8576d8a2a86455e33e2bc4574f8f8b4.

As noted [0] reverting this commit because it is reported to
introduce a regression [1] and there seems to be some issues [2]
with the fix.

[0] http://inbox.dpdk.org/stable/3a9ab8af-0a11-248d-24e3-37c7bde7b850@redhat.com/
[1] http://inbox.dpdk.org/stable/DM8PR11MB559167EBA31F8DFEEDE9B51584099@DM8PR11MB5591.namprd11.prod.outlook.com/
[2] http://inbox.dpdk.org/stable/f9030407a47a8554b2c09426c5bc40049647db2d.camel@debian.org/

Fixes: daf06c45e857 ("crypto/ipsec_mb: fix length and offset settings")

Cc: pablo.de.lara.guarch@intel.com
Signed-off-by: Kevin Traynor <ktraynor@redhat.com>
---
 drivers/crypto/ipsec_mb/pmd_aesni_mb.c | 93 ++++++++++----------------
 1 file changed, 36 insertions(+), 57 deletions(-)

diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
index 748382320b..a308d42ffa 100644
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
@@ -919,7 +919,5 @@ aesni_mb_set_docsis_sec_session_parameters(
 static inline uint64_t
 auth_start_offset(struct rte_crypto_op *op, struct aesni_mb_session *session,
-		uint32_t oop, const uint32_t auth_offset,
-		const uint32_t cipher_offset, const uint32_t auth_length,
-		const uint32_t cipher_length)
+		uint32_t oop)
 {
 	struct rte_mbuf *m_src, *m_dst;
@@ -930,5 +928,5 @@ auth_start_offset(struct rte_crypto_op *op, struct aesni_mb_session *session,
 	/* Only cipher then hash needs special calculation. */
 	if (!oop || session->chain_order != IMB_ORDER_CIPHER_HASH)
-		return auth_offset;
+		return op->sym->auth.data.offset;
 
 	m_src = op->sym->m_src;
@@ -938,5 +936,5 @@ auth_start_offset(struct rte_crypto_op *op, struct aesni_mb_session *session,
 	p_dst = rte_pktmbuf_mtod(m_dst, uint8_t *);
 	u_src = (uintptr_t)p_src;
-	u_dst = (uintptr_t)p_dst + auth_offset;
+	u_dst = (uintptr_t)p_dst + op->sym->auth.data.offset;
 
 	/**
@@ -944,9 +942,9 @@ auth_start_offset(struct rte_crypto_op *op, struct aesni_mb_session *session,
 	 * correct digest.
 	 */
-	if (cipher_offset > auth_offset)
-		memcpy(p_dst + auth_offset,
-				p_src + auth_offset,
-				cipher_offset -
-				auth_offset);
+	if (op->sym->cipher.data.offset > op->sym->auth.data.offset)
+		memcpy(p_dst + op->sym->auth.data.offset,
+				p_src + op->sym->auth.data.offset,
+				op->sym->cipher.data.offset -
+				op->sym->auth.data.offset);
 
 	/**
@@ -954,6 +952,6 @@ auth_start_offset(struct rte_crypto_op *op, struct aesni_mb_session *session,
 	 * length) for generating correct digest
 	 */
-	cipher_end = cipher_offset + cipher_length;
-	auth_end = auth_offset + auth_length;
+	cipher_end = op->sym->cipher.data.offset + op->sym->cipher.data.length;
+	auth_end = op->sym->auth.data.offset + op->sym->auth.data.length;
 	if (cipher_end < auth_end)
 		memcpy(p_dst + cipher_end, p_src + cipher_end,
@@ -1102,8 +1100,4 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 	struct aesni_mb_session *session;
 	uint32_t m_offset, oop;
-	uint32_t auth_off_in_bytes;
-	uint32_t ciph_off_in_bytes;
-	uint32_t auth_len_in_bytes;
-	uint32_t ciph_len_in_bytes;
 
 	session = ipsec_mb_get_session_private(qp, op);
@@ -1214,5 +1208,4 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 		job->enc_keys = session->cipher.zuc_cipher_key;
 		job->dec_keys = session->cipher.zuc_cipher_key;
-		m_offset >>= 3;
 	} else if (job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2_BITLEN) {
 		job->enc_keys = &session->cipher.pKeySched_snow3g_cipher;
@@ -1272,4 +1265,7 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 	switch (job->hash_alg) {
 	case IMB_AUTH_AES_CCM:
+		job->cipher_start_src_offset_in_bytes =
+				op->sym->aead.data.offset;
+		job->msg_len_to_cipher_in_bytes = op->sym->aead.data.length;
 		job->hash_start_src_offset_in_bytes = op->sym->aead.data.offset;
 		job->msg_len_to_hash_in_bytes = op->sym->aead.data.length;
@@ -1281,9 +1277,17 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 	case IMB_AUTH_AES_GMAC:
 		if (session->cipher.mode == IMB_CIPHER_GCM) {
+			job->cipher_start_src_offset_in_bytes =
+					op->sym->aead.data.offset;
 			job->hash_start_src_offset_in_bytes =
 					op->sym->aead.data.offset;
+			job->msg_len_to_cipher_in_bytes =
+					op->sym->aead.data.length;
 			job->msg_len_to_hash_in_bytes =
 					op->sym->aead.data.length;
 		} else {
+			job->cipher_start_src_offset_in_bytes =
+					op->sym->auth.data.offset;
+			job->hash_start_src_offset_in_bytes =
+					op->sym->auth.data.offset;
 			job->msg_len_to_cipher_in_bytes = 0;
 			job->msg_len_to_hash_in_bytes = 0;
@@ -1295,6 +1299,10 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 
 	case IMB_AUTH_CHACHA20_POLY1305:
+		job->cipher_start_src_offset_in_bytes =
+			op->sym->aead.data.offset;
 		job->hash_start_src_offset_in_bytes =
 			op->sym->aead.data.offset;
+		job->msg_len_to_cipher_in_bytes =
+				op->sym->aead.data.length;
 		job->msg_len_to_hash_in_bytes =
 					op->sym->aead.data.length;
@@ -1303,46 +1311,12 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 				session->iv.offset);
 		break;
-	/* ZUC and SNOW3G require length in bits and offset in bytes */
-	case IMB_AUTH_ZUC_EIA3_BITLEN:
-	case IMB_AUTH_ZUC256_EIA3_BITLEN:
-	case IMB_AUTH_SNOW3G_UIA2_BITLEN:
-		auth_off_in_bytes = op->sym->auth.data.offset >> 3;
-		ciph_off_in_bytes = op->sym->cipher.data.offset >> 3;
-		auth_len_in_bytes = op->sym->auth.data.length >> 3;
-		ciph_len_in_bytes = op->sym->cipher.data.length >> 3;
-
-		job->hash_start_src_offset_in_bytes = auth_start_offset(op,
-				session, oop, auth_off_in_bytes,
-				ciph_off_in_bytes, auth_len_in_bytes,
-				ciph_len_in_bytes);
-		job->msg_len_to_hash_in_bits = op->sym->auth.data.length;
-
-		job->iv = rte_crypto_op_ctod_offset(op, uint8_t *,
-			session->iv.offset);
-		break;
-
-	/* KASUMI requires lengths and offset in bytes */
-	case IMB_AUTH_KASUMI_UIA1:
-		auth_off_in_bytes = op->sym->auth.data.offset >> 3;
-		ciph_off_in_bytes = op->sym->cipher.data.offset >> 3;
-		auth_len_in_bytes = op->sym->auth.data.length >> 3;
-		ciph_len_in_bytes = op->sym->cipher.data.length >> 3;
-
-		job->hash_start_src_offset_in_bytes = auth_start_offset(op,
-				session, oop, auth_off_in_bytes,
-				ciph_off_in_bytes, auth_len_in_bytes,
-				ciph_len_in_bytes);
-		job->msg_len_to_hash_in_bytes = auth_len_in_bytes;
-
-		job->iv = rte_crypto_op_ctod_offset(op, uint8_t *,
-			session->iv.offset);
-		break;
-
 	default:
+		/* For SNOW3G, length and offsets are already in bits */
+		job->cipher_start_src_offset_in_bytes =
+				op->sym->cipher.data.offset;
+		job->msg_len_to_cipher_in_bytes = op->sym->cipher.data.length;
+
 		job->hash_start_src_offset_in_bytes = auth_start_offset(op,
-				session, oop, op->sym->auth.data.offset,
-				op->sym->cipher.data.offset,
-				op->sym->auth.data.length,
-				op->sym->cipher.data.length);
+				session, oop);
 		job->msg_len_to_hash_in_bytes = op->sym->auth.data.length;
 
@@ -1351,4 +1325,9 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
 	}
 
+	if (job->cipher_mode == IMB_CIPHER_ZUC_EEA3)
+		job->msg_len_to_cipher_in_bytes >>= 3;
+	else if (job->hash_alg == IMB_AUTH_KASUMI_UIA1)
+		job->msg_len_to_hash_in_bytes >>= 3;
+
 	/* Set user data to be crypto operation data struct */
 	job->user_data = op;
-- 
2.34.1


             reply	other threads:[~2022-03-21 15:35 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-21 15:35 Kevin Traynor [this message]
2022-03-21 19:12 ` Luca Boccassi
2022-03-21 19:58   ` De Lara Guarch, Pablo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220321153527.67663-1-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=pablo.de.lara.guarch@intel.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).