crypto/qat: fix offset for out-of-place scatter-gather
authorArek Kusztal <arkadiuszx.kusztal@intel.com>
Thu, 18 Mar 2021 13:16:17 +0000 (13:16 +0000)
committerAkhil Goyal <gakhil@marvell.com>
Fri, 16 Apr 2021 10:43:33 +0000 (12:43 +0200)
This commit fixes problem with to small offset when both offsets
(auth, cipher) are non zero in digest encrypt case,
when using out-of-place and sgl.

Fixes: 40002f6c2a24 ("crypto/qat: extend support for digest-encrypted auth-cipher")
Cc: stable@dpdk.org
Signed-off-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
drivers/crypto/qat/qat_sym.c

index 2c0f5cd..a1f5676 100644 (file)
@@ -228,6 +228,7 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
        uint8_t do_sgl = 0;
        uint8_t in_place = 1;
        int alignment_adjustment = 0;
+       int oop_shift = 0;
        struct rte_crypto_op *op = (struct rte_crypto_op *)in_op;
        struct qat_sym_op_cookie *cookie =
                                (struct qat_sym_op_cookie *)op_cookie;
@@ -538,6 +539,7 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
                        rte_pktmbuf_iova_offset(op->sym->m_src, min_ofs);
                dst_buf_start =
                        rte_pktmbuf_iova_offset(op->sym->m_dst, min_ofs);
+               oop_shift = min_ofs;
 
        } else {
                /* In-place operation
@@ -598,7 +600,7 @@ qat_sym_build_request(void *in_op, uint8_t *out_msg,
                 /* First find the end of the data */
                if (do_sgl) {
                        uint32_t remaining_off = auth_param->auth_off +
-                               auth_param->auth_len + alignment_adjustment;
+                               auth_param->auth_len + alignment_adjustment + oop_shift;
                        struct rte_mbuf *sgl_buf =
                                (in_place ?
                                        op->sym->m_src : op->sym->m_dst);