aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/crypto/chelsio/chcr_algo.c
diff options
context:
space:
mode:
authorYueHaibing <yuehaibing@huawei.com>2018-12-28 14:41:00 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2019-01-11 14:16:56 +0800
commit66af86d93ce32ff5b262ace9a6696873cc1bdb3e (patch)
treeb7221d16b13ca3d996d71149fbd90dd35b062791 /drivers/crypto/chelsio/chcr_algo.c
parentcrypto: ux500 - catch dma submission error (diff)
downloadwireguard-linux-66af86d93ce32ff5b262ace9a6696873cc1bdb3e.tar.xz
wireguard-linux-66af86d93ce32ff5b262ace9a6696873cc1bdb3e.zip
crypto: chelsio - check set_msg_len overflow in generate_b0
set_msg_len may fails with -EOVERFLOW, It should be propagate to upstream. Fixes: 2debd3325e55 ("crypto: chcr - Add AEAD algos.") Signed-off-by: YueHaibing <yuehaibing@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/chelsio/chcr_algo.c')
-rw-r--r--drivers/crypto/chelsio/chcr_algo.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/crypto/chelsio/chcr_algo.c b/drivers/crypto/chelsio/chcr_algo.c
index bcef76508dfa..bdbdce9fdf25 100644
--- a/drivers/crypto/chelsio/chcr_algo.c
+++ b/drivers/crypto/chelsio/chcr_algo.c
@@ -2762,7 +2762,7 @@ static int set_msg_len(u8 *block, unsigned int msglen, int csize)
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 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,
(op_type == CHCR_DECRYPT_OP) ?
req->cryptlen - m : req->cryptlen, l);
+
+ return rc;
}
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)) =
htons(assoclen);
- generate_b0(req, ivptr, op_type);
+ rc = generate_b0(req, ivptr, op_type);
/* zero the ctr value */
memset(ivptr + 15 - ivptr[0], 0, ivptr[0] + 1);
return rc;