Description
In the Linux kernel, the following vulnerability has been resolved: crypto: qce - fix CCM AAD buffer underallocation The AAD buffer allocated in qce_aead_ccm_prepare_buf_assoclen() can be smaller than the length later programmed into the DMA scatterlist. The allocation size is currently calculated as: ALIGN(assoclen, 16) + MAX_CCM_ADATA_HEADER_LEN while the DMA length is set to: ALIGN(assoclen + adata_header_len, 16) Since ALIGN() does not distribute over addition, the allocation can be smaller than the DMA length. For example, when assoclen = 32 and adata_header_len = 2: allocation = ALIGN(32, 16) + 6 = 38 DMA length = ALIGN(32 + 2, 16) = 48 As a result, the QCE hardware can read beyond the allocated buffer while computing the CBC-MAC over the associated data. The extra bytes are folded into the authentication tag, resulting in an incorrect tag and causing CCM self-test failures such as: alg: aead: ccm-aes-qce encryption test failed (wrong result) on test vector 8 Fix the allocation by adding the maximum possible AAD header length before alignment: ALIGN(assoclen + MAX_CCM_ADATA_HEADER_LEN, 16) This guarantees that the allocated buffer is large enough for the fully padded AAD data for all supported header sizes.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < 11775b35ce9f27e73d62188d7d38aa0dc0a219aaaffected9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < c9e0f06a023107694698a7930616aeb460d91816affected9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < cc56d2b0d77cfeea061e98114992ee687d5eb4ddaffected9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < 002f1f99aef7ea631cb687fc17bce64e4963f6aaaffected9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < 2f65718b9c1095eef1ae9b374aa0384b1b083f3caffected9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < 46a84efe2dbaddde89073a3c00c694486937c34baffected9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < 4839f4c21f9c577eedef2919ced878a3057c7fc3affected9363efb4181c5e0fbf86bdfa759262aa29f0eb50 to < 7f2345f47dd189625f657cd72437179ab4170ee1affected
Linux Linux
Default version status: affected
5.14affected0 to < 5.14unaffected5.15.220 to ≤ 5.15.*unaffected6.1.187 to ≤ 6.1.*unaffected6.6.156 to ≤ 6.6.*unaffected6.12.108 to ≤ 6.12.*unaffected6.18.49 to ≤ 6.18.*unaffected7.1.13 to ≤ 7.1.*unaffected7.2.3 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/11775b35ce9f27e73d62188d7d38aa0dc0a219aa ↗
- https://git.kernel.org/stable/c/c9e0f06a023107694698a7930616aeb460d91816 ↗
- https://git.kernel.org/stable/c/cc56d2b0d77cfeea061e98114992ee687d5eb4dd ↗
- https://git.kernel.org/stable/c/002f1f99aef7ea631cb687fc17bce64e4963f6aa ↗
- https://git.kernel.org/stable/c/2f65718b9c1095eef1ae9b374aa0384b1b083f3c ↗
- https://git.kernel.org/stable/c/46a84efe2dbaddde89073a3c00c694486937c34b ↗
- https://git.kernel.org/stable/c/4839f4c21f9c577eedef2919ced878a3057c7fc3 ↗
- https://git.kernel.org/stable/c/7f2345f47dd189625f657cd72437179ab4170ee1 ↗