From 22e89aca88f007447bf7efb16b5af1bb1456a3d6 Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Mon, 15 Dec 2025 17:52:44 -0500 Subject: [PATCH] DDT: Fix compressed entry buffer size The first byte of the entry after compression is used for algorithm and byte order flag. We should decrement when calling compression/ decompression algorithm. Reviewed-by: Brian Behlendorf Signed-off-by: Alexander Motin Closes #18055 --- module/zfs/ddt_zap.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/zfs/ddt_zap.c b/module/zfs/ddt_zap.c index 9dbae6350..a8b299726 100644 --- a/module/zfs/ddt_zap.c +++ b/module/zfs/ddt_zap.c @@ -57,7 +57,7 @@ ddt_zap_compress(const void *src, uchar_t *dst, size_t s_len, size_t d_len) /* Call compress function directly to avoid hole detection. */ abd_t sabd, dabd; abd_get_from_buf_struct(&sabd, (void *)src, s_len); - abd_get_from_buf_struct(&dabd, dst, d_len); + abd_get_from_buf_struct(&dabd, dst, d_len - 1); c_len = ci->ci_compress(&sabd, &dabd, s_len, d_len - 1, ci->ci_level); abd_free(&dabd); abd_free(&sabd); @@ -86,9 +86,10 @@ ddt_zap_decompress(uchar_t *src, void *dst, size_t s_len, size_t d_len) } abd_t sabd, dabd; - abd_get_from_buf_struct(&sabd, src, s_len); + size_t c_len = s_len - 1; + abd_get_from_buf_struct(&sabd, src, c_len); abd_get_from_buf_struct(&dabd, dst, d_len); - VERIFY0(zio_decompress_data(cpfunc, &sabd, &dabd, s_len, d_len, NULL)); + VERIFY0(zio_decompress_data(cpfunc, &sabd, &dabd, c_len, d_len, NULL)); abd_free(&dabd); abd_free(&sabd);