Commit 66af86d9 authored by YueHaibing's avatar YueHaibing Committed by Herbert Xu

crypto: chelsio - check set_msg_len overflow in generate_b0

set_msg_len may fails with -EOVERFLOW, It should be propagate
to upstream.

Fixes: 2debd332 ("crypto: chcr - Add AEAD algos.")
Signed-off-by: default avatarYueHaibing <yuehaibing@huawei.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent be8a54d3
...@@ -2762,7 +2762,7 @@ static int set_msg_len(u8 *block, unsigned int msglen, int csize) ...@@ -2762,7 +2762,7 @@ static int set_msg_len(u8 *block, unsigned int msglen, int csize)
return 0; return 0;
} }
static void generate_b0(struct aead_request *req, u8 *ivptr, static int generate_b0(struct aead_request *req, u8 *ivptr,
unsigned short op_type) unsigned short op_type)
{ {
unsigned int l, lp, m; unsigned int l, lp, m;
...@@ -2787,6 +2787,8 @@ static void generate_b0(struct aead_request *req, u8 *ivptr, ...@@ -2787,6 +2787,8 @@ static void generate_b0(struct aead_request *req, u8 *ivptr,
rc = set_msg_len(b0 + 16 - l, rc = set_msg_len(b0 + 16 - l,
(op_type == CHCR_DECRYPT_OP) ? (op_type == CHCR_DECRYPT_OP) ?
req->cryptlen - m : req->cryptlen, l); req->cryptlen - m : req->cryptlen, l);
return rc;
} }
static inline int crypto_ccm_check_iv(const u8 *iv) static inline int crypto_ccm_check_iv(const u8 *iv)
...@@ -2821,7 +2823,7 @@ static int ccm_format_packet(struct aead_request *req, ...@@ -2821,7 +2823,7 @@ static int ccm_format_packet(struct aead_request *req,
*((unsigned short *)(reqctx->scratch_pad + 16)) = *((unsigned short *)(reqctx->scratch_pad + 16)) =
htons(assoclen); htons(assoclen);
generate_b0(req, ivptr, op_type); rc = generate_b0(req, ivptr, op_type);
/* zero the ctr value */ /* zero the ctr value */
memset(ivptr + 15 - ivptr[0], 0, ivptr[0] + 1); memset(ivptr + 15 - ivptr[0], 0, ivptr[0] + 1);
return rc; return rc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment