crypto: chelsio - check set_msg_len overflow in generate_b0
authorYueHaibing <yuehaibing@huawei.com>
Fri, 28 Dec 2018 06:41:00 +0000 (14:41 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 11 Jan 2019 06:16:56 +0000 (14:16 +0800)
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>
drivers/crypto/chelsio/chcr_algo.c

index bcef76508dfaeeafaedca586b2be01cb7cb9598e..bdbdce9fdf25c8e93802455ab165b28c2a153dc8 100644 (file)
@@ -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;