]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
lib/decompress: check for reserved bit corruption in zstd 3840/head
authoraimuz <mr.imuz@gmail.com>
Tue, 28 Nov 2023 13:04:37 +0000 (21:04 +0800)
committeraimuz <mr.imuz@gmail.com>
Tue, 28 Nov 2023 13:04:37 +0000 (21:04 +0800)
The patch adds a validation to ensure that the last field, which is
reserved, must be all-zeroes in ZSTD_decodeSeqHeaders. This prevents
potential corruption from going undetected.

Fixes an issue where corrupted input could lead to undefined behavior
due to improper validation of reserved bits.

Signed-off-by: aimuz <mr.imuz@gmail.com>
lib/decompress/zstd_decompress_block.c

index 19cbdc5c16eb2669a93dd413cbacf41894e8d626..80c29db69dbe861f54eeaba914d27b401873546a 100644 (file)
@@ -607,6 +607,7 @@ size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr,
 
     /* FSE table descriptors */
     RETURN_ERROR_IF(ip+1 > iend, srcSize_wrong, ""); /* minimum possible size: 1 byte for symbol encoding types */
+    RETURN_ERROR_IF(*ip & 3, corruption_detected, ""); /* The last field, Reserved, must be all-zeroes. */
     {   symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
         symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
         symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);