mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
crypto: authencesn - reject too-short AAD (assoclen<8) to match ESP/ESN spec
authencesn assumes an ESP/ESN-formatted AAD. When assoclen is shorter than
the minimum expected length, crypto_authenc_esn_decrypt() can advance past
the end of the destination scatterlist and trigger a NULL pointer dereference
in scatterwalk_map_and_copy(), leading to a kernel panic (DoS).
Add a minimum AAD length check to fail fast on invalid inputs.
Fixes: 104880a6b4 ("crypto: authencesn - Convert to new AEAD interface")
Reported-By: Taeyang Lee <0wn@theori.io>
Signed-off-by: Taeyang Lee <0wn@theori.io>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -169,6 +169,9 @@ static int crypto_authenc_esn_encrypt(struct aead_request *req)
|
|||||||
struct scatterlist *src, *dst;
|
struct scatterlist *src, *dst;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (assoclen < 8)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
sg_init_table(areq_ctx->src, 2);
|
sg_init_table(areq_ctx->src, 2);
|
||||||
src = scatterwalk_ffwd(areq_ctx->src, req->src, assoclen);
|
src = scatterwalk_ffwd(areq_ctx->src, req->src, assoclen);
|
||||||
dst = src;
|
dst = src;
|
||||||
@@ -256,6 +259,9 @@ static int crypto_authenc_esn_decrypt(struct aead_request *req)
|
|||||||
u32 tmp[2];
|
u32 tmp[2];
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (assoclen < 8)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
cryptlen -= authsize;
|
cryptlen -= authsize;
|
||||||
|
|
||||||
if (req->src != dst)
|
if (req->src != dst)
|
||||||
|
|||||||
Reference in New Issue
Block a user