crypto: chelsio - check set_msg_len overflow in generate_b0
set_msg_len may fails with -EOVERFLOW, It should be propagate
to upstream.
Fixes: 2debd3325e
("crypto: chcr - Add AEAD algos.")
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
be8a54d367
commit
66af86d93c
|
@ -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,
|
||||||
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,
|
||||||
*((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;
|
||||||
|
|
Loading…
Reference in New Issue