From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 61B9445588; Thu, 4 Jul 2024 12:26:55 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5141E42E9E; Thu, 4 Jul 2024 12:26:55 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.13]) by mails.dpdk.org (Postfix) with ESMTP id F1EB842E98; Thu, 4 Jul 2024 12:26:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1720088814; x=1751624814; h=from:to:cc:subject:date:message-id; bh=V0DQuBCGeQYzEjkS5aU8J3y+iaBnvd6Nn9xl373FW10=; b=BkqeWaVt0ia0BJuZay19/rwcDvt9X53SYmr5MWbGkUuVL4MwwCp2Fkf0 zYd0fDooIJOmKkSLHth/E7fcflWK3ou0+D8DSjc/gb2OUjNqDjyKHkQnH CNEzgHQdi6rw6cLVhMjsXG21aBX1ttDerulgXRGHuQVzY41+aVk1/Fdym Ot8ZmN7RaVt5AGPxZpcqRSdOgP4vog9FkFGdq7Qn7Y4GoFTMXsIdYyYQu fQaSoXsEwDFFeR6v/+Mg3tZtw5vqt4LSYi3+S977LmNk57gjEUmBeHg76 LUoS0itM7VZgS7lRuevB58v3qb1zUDiFM2mFCSVZlTlK247uc1WRQY1Fp Q==; X-CSE-ConnectionGUID: cJQmM7jPRw6smdKZDSYhTg== X-CSE-MsgGUID: 1ZFeCaLvQHelQcT43O5meQ== X-IronPort-AV: E=McAfee;i="6700,10204,11122"; a="20268141" X-IronPort-AV: E=Sophos;i="6.09,183,1716274800"; d="scan'208";a="20268141" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jul 2024 03:26:53 -0700 X-CSE-ConnectionGUID: DiUnPVb2RpaUjkuL3lw98g== X-CSE-MsgGUID: 3mkEX4G3Rs6BcAjKbIwG8w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.09,183,1716274800"; d="scan'208";a="69748405" Received: from silpixa00400308.ir.intel.com ([10.237.214.154]) by fmviesa002.fm.intel.com with ESMTP; 04 Jul 2024 03:26:52 -0700 From: Arkadiusz Kusztal To: dev@dpdk.org Cc: gakhil@marvell.com, brian.dooley@intel.com, Arkadiusz Kusztal , stable@dpdk.org Subject: [PATCH] crypto/qat: fix incorrect placement of oop offset Date: Thu, 4 Jul 2024 11:26:49 +0100 Message-Id: <20240704102649.30400-1-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.17.1 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This patch fixes incorrect placement of OOP offset. Data preceding crypto operation is not copied to the output buffer, which is conformant to the API. Fixes: a815a04cea05 ("crypto/qat: support symmetric build op request") Cc: stable@dpdk.org Signed-off-by: Arkadiusz Kusztal --- drivers/crypto/qat/dev/qat_crypto_pmd_gens.h | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h index 1f5d2583c4..83d5870cae 100644 --- a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h +++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h @@ -399,7 +399,7 @@ qat_sym_convert_op_to_vec_chain(struct rte_crypto_op *op, struct qat_sym_op_cookie *cookie) { union rte_crypto_sym_ofs ofs; - uint32_t max_len = 0; + uint32_t max_len = 0, oop_offset = 0; uint32_t cipher_len = 0, cipher_ofs = 0; uint32_t auth_len = 0, auth_ofs = 0; int is_oop = (op->sym->m_dst != NULL) && @@ -473,6 +473,16 @@ qat_sym_convert_op_to_vec_chain(struct rte_crypto_op *op, max_len = RTE_MAX(cipher_ofs + cipher_len, auth_ofs + auth_len); + /* If OOP, we need to keep in mind that offset needs to start where + * cipher/auth starts, namely no offset on the smaller one + */ + if (is_oop) { + oop_offset = RTE_MIN(auth_ofs, cipher_ofs); + auth_ofs -= oop_offset; + cipher_ofs -= oop_offset; + max_len -= oop_offset; + } + /* digest in buffer check. Needed only for wireless algos * or combined cipher-crc operations */ @@ -513,9 +523,7 @@ qat_sym_convert_op_to_vec_chain(struct rte_crypto_op *op, max_len = RTE_MAX(max_len, auth_ofs + auth_len + ctx->digest_length); } - - /* Passing 0 as cipher & auth offsets are assigned into ofs later */ - n_src = rte_crypto_mbuf_to_vec(op->sym->m_src, 0, max_len, + n_src = rte_crypto_mbuf_to_vec(op->sym->m_src, oop_offset, max_len, in_sgl->vec, QAT_SYM_SGL_MAX_NUMBER); if (unlikely(n_src < 0 || n_src > op->sym->m_src->nb_segs)) { op->status = RTE_CRYPTO_OP_STATUS_ERROR; @@ -525,7 +533,7 @@ qat_sym_convert_op_to_vec_chain(struct rte_crypto_op *op, if (unlikely((op->sym->m_dst != NULL) && (op->sym->m_dst != op->sym->m_src))) { - int n_dst = rte_crypto_mbuf_to_vec(op->sym->m_dst, 0, + int n_dst = rte_crypto_mbuf_to_vec(op->sym->m_dst, oop_offset, max_len, out_sgl->vec, QAT_SYM_SGL_MAX_NUMBER); if (n_dst < 0 || n_dst > op->sym->m_dst->nb_segs) { -- 2.13.6