mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
crypto: nx - validate 'ignore' before subtracting in decompress
The decompress() function subtracts the header-supplied `ignore` value (a u16 from the compressed stream) from `dlen` (the number of bytes produced by the decompressor) without checking that ignore <= dlen. If a caller decompresses a crafted buffer where `hdr->ignore` exceeds the actual decompressed length, the subtraction wraps around to a near-UINT_MAX value. The subsequent memcpy() then copies gigabytes of data past the destination buffer, causing an out-of-bounds kernel write. Add a bounds check before the subtraction and return -EINVAL if the value is inconsistent. Cc: stable@vger.kernel.org Signed-off-by: Aldo Ariel Panzardo <qwe.aldo@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
7e7be88151
commit
b5c2df4297
|
|
@ -421,6 +421,8 @@ static int decompress(struct nx842_crypto_ctx *ctx,
|
|||
|
||||
slen -= spadding;
|
||||
|
||||
if (ignore > dlen)
|
||||
return -EINVAL;
|
||||
dlen -= ignore;
|
||||
if (ignore)
|
||||
pr_debug("ignoring last %x bytes\n", ignore);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user