From 9b0a99d50b5162e612453b7ca7865786102157c4 Mon Sep 17 00:00:00 2001 From: yuzh <1109426275@qq.com> Date: Fri, 9 May 2025 18:38:23 +0800 Subject: [PATCH 1/3] fix uadk lz77 data overflow bug --- KAEZstd/open_source/kaezstd_1_5_2.patch | 10 ++- build.sh | 2 + .../0006-fix-uadk-lz77-data-error.patch | 90 +++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 scripts/patches/0006-fix-uadk-lz77-data-error.patch diff --git a/KAEZstd/open_source/kaezstd_1_5_2.patch b/KAEZstd/open_source/kaezstd_1_5_2.patch index 4bdc4af..6c831b8 100644 --- a/KAEZstd/open_source/kaezstd_1_5_2.patch +++ b/KAEZstd/open_source/kaezstd_1_5_2.patch @@ -182,7 +182,15 @@ diff -uprN zstd/lib/compress/zstd_compress.c zstd_new/lib/compress/zstd_compress } DEBUGLOG(4, "ZSTD_compressBegin_usingDict (dictSize=%u)", (unsigned)dictSize); return ZSTD_compressBegin_internal(cctx, dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast, NULL, -@@ -4716,6 +4770,9 @@ size_t ZSTD_compress_usingDict(ZSTD_CCtx +@@ -4672,6 +4726,7 @@ size_t ZSTD_compressEnd (ZSTD_CCtx* cctx + (unsigned)cctx->consumedSrcSize); + } + ZSTD_CCtx_trace(cctx, endResult); ++ kaezstd_reset(cctx); + return cSize + endResult; + } + +@@ -4716,6 +4771,9 @@ size_t ZSTD_compress_usingDict(ZSTD_CCtx ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, srcSize, dict ? dictSize : 0, ZSTD_cpm_noAttachDict); assert(params.fParams.contentSizeFlag == 1); ZSTD_CCtxParams_init_internal(&cctx->simpleApiParams, ¶ms, (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT: compressionLevel); diff --git a/build.sh b/build.sh index ed57d3e..d3af2a9 100644 --- a/build.sh +++ b/build.sh @@ -131,6 +131,8 @@ function build_rpm() patch --no-backup-if-mismatch -p1 -N -s --forward < ./scripts/patches/0003-fix-uadk-openssl3-bug.patch patch --no-backup-if-mismatch -p1 -R -s --forward < ./scripts/patches/0005-add-uadk-ecc-and-comp-header-for-kae.patch || true patch --no-backup-if-mismatch -p1 -N -s --forward < ./scripts/patches/0005-add-uadk-ecc-and-comp-header-for-kae.patch + patch --no-backup-if-mismatch -p1 -R -s --forward < ./scripts/patches/0006-fix-uadk-lz77-data-error.patch || true + patch --no-backup-if-mismatch -p1 -N -s --forward < ./scripts/patches/0006-fix-uadk-lz77-data-error.patch cd $KAE_UADK_DIR sh autogen.sh diff --git a/scripts/patches/0006-fix-uadk-lz77-data-error.patch b/scripts/patches/0006-fix-uadk-lz77-data-error.patch new file mode 100644 index 0000000..e9f4a45 --- /dev/null +++ b/scripts/patches/0006-fix-uadk-lz77-data-error.patch @@ -0,0 +1,90 @@ +From 3ab77b31bf03c28d812b8a77ae91b320dcaf2a70 Mon Sep 17 00:00:00 2001 +From: YuZhiHuan +Date: Fri, 9 May 2025 14:08:20 +0800 +Subject: [PATCH] fix uadk zstd bug + +--- + uadk/drv/hisi_comp.c | 6 ++++-- + uadk/v1/drv/hisi_zip_udrv.c | 14 ++++++++------ + 2 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/uadk/drv/hisi_comp.c b/uadk/drv/hisi_comp.c +index 71e859f..7b95724 100644 +--- a/uadk/drv/hisi_comp.c ++++ b/uadk/drv/hisi_comp.c +@@ -74,7 +74,8 @@ + #define CTX_REPCODE1_OFFSET 12 + #define CTX_REPCODE2_OFFSET 24 + #define CTX_HW_REPCODE_OFFSET 784 +-#define OVERFLOW_DATA_SIZE 2 ++#define OVERFLOW_DATA_SIZE 8 ++#define SEQ_DATA_SIZE_SHIFT 3 + #define ZSTD_FREQ_DATA_SIZE 784 + #define ZSTD_LIT_RESV_SIZE 16 + #define REPCODE_SIZE 12 +@@ -712,7 +713,8 @@ static void get_data_size_lz77_zstd(struct hisi_zip_sqe *sqe, enum wd_comp_op_ty + data->seq_num = sqe->produced; + data->lit_length_overflow_cnt = sqe->dw31 >> LITLEN_OVERFLOW_CNT_SHIFT; + data->lit_length_overflow_pos = sqe->dw31 & LITLEN_OVERFLOW_POS_MASK; +- data->freq = data->sequences_start + data->seq_num + OVERFLOW_DATA_SIZE; ++ data->freq = data->sequences_start + (data->seq_num << SEQ_DATA_SIZE_SHIFT) + ++ OVERFLOW_DATA_SIZE; + + if (ctx_buf) { + memcpy(ctx_buf + CTX_REPCODE2_OFFSET, +diff --git a/uadk/v1/drv/hisi_zip_udrv.c b/uadk/v1/drv/hisi_zip_udrv.c +index 8497ebc..83a812c 100644 +--- a/uadk/v1/drv/hisi_zip_udrv.c ++++ b/uadk/v1/drv/hisi_zip_udrv.c +@@ -39,7 +39,7 @@ + #define STREAM_POS_SHIFT 2 + #define STREAM_MODE_SHIFT 1 + #define WINDOWS_SIZE_SHIFT 12 +-#define SEQUENCE_SZIE 8 ++#define SEQ_DATA_SIZE_SHIFT 3 + + #define HW_NEGACOMPRESS 0x0d + #define HW_CRC_ERR 0x10 +@@ -57,6 +57,7 @@ + #define ZSTD_LIT_RSV_SIZE 16 + #define ZSTD_FREQ_DATA_SIZE 784 + #define REPCODE_SIZE 12 ++#define OVERFLOW_DATA_SIZE 8 + + /* Error status 0xe indicates that dest_avail_out insufficient */ + #define ERR_DSTLEN_OUT 0xe +@@ -679,8 +680,8 @@ int qm_fill_zip_sqe_v3(void *smsg, struct qm_queue_info *info, __u16 i) + } + + /* +- * Checksum[31:24] equals LitLength_Overflow_Pos; +- * Checksum[23:0] equals Freq_Literal_Overflow_cnt; ++ * Checksum[31:24] equals Freq_Literal_Overflow_cnt; ++ * Checksum[23:0] equals LitLength_Overflow_Pos; + */ + #define LILL_OVERFLOW_POS 0x00ffffff + #define LILL_OVERFLOW_CNT_OFFSET 24 +@@ -695,8 +696,8 @@ static void fill_priv_lz77_zstd(void *ssqe, struct wcrypto_comp_msg *recv_msg) + format->lit_num = sqe->comp_data_length; + format->seq_num = sqe->produced; + +- format->lit_length_overflow_cnt = sqe->checksum & LILL_OVERFLOW_POS; +- format->lit_length_overflow_pos = (sqe->checksum & ~LILL_OVERFLOW_POS) >> ++ format->lit_length_overflow_pos = sqe->checksum & LILL_OVERFLOW_POS; ++ format->lit_length_overflow_cnt = (sqe->checksum & ~LILL_OVERFLOW_POS) >> + LILL_OVERFLOW_CNT_OFFSET; + + if (recv_msg->data_fmt == WD_SGL_BUF) { +@@ -706,7 +707,8 @@ static void fill_priv_lz77_zstd(void *ssqe, struct wcrypto_comp_msg *recv_msg) + } else { + format->literals_start = recv_msg->dst; + format->sequences_start = recv_msg->dst + recv_msg->in_size + ZSTD_LIT_RSV_SIZE; +- format->freq = (void *)(&format->lit_length_overflow_pos + 1); ++ format->freq = format->sequences_start + (format->seq_num << SEQ_DATA_SIZE_SHIFT) + ++ OVERFLOW_DATA_SIZE; + } + + if (ctx_buf) { +-- +2.33.0 + -- Gitee From 9fb590e80a1cfc5f1b62daba347e6346377cbf10 Mon Sep 17 00:00:00 2001 From: yuzh <1109426275@qq.com> Date: Fri, 9 May 2025 11:05:31 +0000 Subject: [PATCH 2/3] update build.sh Signed-off-by: yuzh <1109426275@qq.com> --- build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.sh b/build.sh index d3af2a9..711cfba 100644 --- a/build.sh +++ b/build.sh @@ -297,6 +297,8 @@ function build_uadk() patch --no-backup-if-mismatch -p1 -N -s --forward < ./scripts/patches/0003-fix-uadk-openssl3-bug.patch patch --no-backup-if-mismatch -p1 -R -s --forward < ./scripts/patches/0005-add-uadk-ecc-and-comp-header-for-kae.patch || true patch --no-backup-if-mismatch -p1 -N -s --forward < ./scripts/patches/0005-add-uadk-ecc-and-comp-header-for-kae.patch + patch --no-backup-if-mismatch -p1 -R -s --forward < ./scripts/patches/0006-fix-uadk-lz77-data-error.patch || true + patch --no-backup-if-mismatch -p1 -N -s --forward < ./scripts/patches/0006-fix-uadk-lz77-data-error.patch cd ${SRC_PATH}/uadk sh autogen.sh -- Gitee From a80bd0e19b5d04f9c494d07f16804170154e5bf3 Mon Sep 17 00:00:00 2001 From: yuzh <1109426275@qq.com> Date: Fri, 9 May 2025 11:13:45 +0000 Subject: [PATCH 3/3] update kaezstd_data_parsing function Signed-off-by: yuzh <1109426275@qq.com> --- KAEZstd/src/v1/kaezstd_comp.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/KAEZstd/src/v1/kaezstd_comp.c b/KAEZstd/src/v1/kaezstd_comp.c index a1f3199..e7d7ecf 100644 --- a/KAEZstd/src/v1/kaezstd_comp.c +++ b/KAEZstd/src/v1/kaezstd_comp.c @@ -32,6 +32,11 @@ static int kaezstd_data_parsing(ZSTD_CCtx* zc, kaezstd_ctx_t* config) config->zstd_data.seq_num * sizeof(seqDef)); zc->seqStore.sequences += config->zstd_data.seq_num; + if (config->zstd_data.lit_length_overflow_cnt == 1) { + zc->seqStore.longLengthType = ZSTD_llt_literalLength; + zc->seqStore.longLengthPos = config->zstd_data.lit_length_overflow_pos; + } + // if (config->tuple.longLengthType != ZSTD_llt_none) { // zc->seqStore.longLengthType = config->tuple.longLengthType; // zc->seqStore.longLengthPos = config->tuple.longLengthPos; -- Gitee