diff options
author | Ryder Lee <ryder.lee@mediatek.com> | 2019-08-28 09:37:13 +0300 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2019-09-05 07:36:54 +0300 |
commit | e049ff5af04b18bfb4105787be198d58c841fc99 (patch) | |
tree | 0c97f96a3cd633b8d92600e514edaabbc0d01862 /drivers/crypto | |
parent | 4797f6cab5096aa4e97cee2d0044dcf8e6bcd7b8 (diff) | |
download | linux-e049ff5af04b18bfb4105787be198d58c841fc99.tar.xz |
crypto: mediatek - fix uninitialized value of gctx->textlen
Add a pre-computed text length to avoid uninitialized value in the check.
Fixes: e47270665b5f ("crypto: mediatek - Add empty messages check in GCM mode")
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Signed-off-by: Vic Wu <vic.wu@mediatek.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
-rw-r--r-- | drivers/crypto/mediatek/mtk-aes.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/crypto/mediatek/mtk-aes.c b/drivers/crypto/mediatek/mtk-aes.c index 0360658e43d5..787b3dd03fc3 100644 --- a/drivers/crypto/mediatek/mtk-aes.c +++ b/drivers/crypto/mediatek/mtk-aes.c @@ -896,14 +896,11 @@ static int mtk_aes_gcm_start(struct mtk_cryp *cryp, struct mtk_aes_rec *aes) aes->resume = mtk_aes_transfer_complete; /* Compute total process length. */ aes->total = len + gctx->authsize; - /* Compute text length. */ - gctx->textlen = req->cryptlen; /* Hardware will append authenticated tag to output buffer */ scatterwalk_map_and_copy(tag, req->dst, len, gctx->authsize, 1); } else { aes->resume = mtk_aes_gcm_tag_verify; aes->total = len; - gctx->textlen = req->cryptlen - gctx->authsize; } return mtk_aes_gcm_dma(cryp, aes, req->src, req->dst, len); @@ -915,19 +912,22 @@ static int mtk_aes_gcm_crypt(struct aead_request *req, u64 mode) struct mtk_aes_gcm_ctx *gctx = mtk_aes_gcm_ctx_cast(ctx); struct mtk_aes_reqctx *rctx = aead_request_ctx(req); struct mtk_cryp *cryp; + bool enc = !!(mode & AES_FLAGS_ENCRYPT); cryp = mtk_aes_find_dev(ctx); if (!cryp) return -ENODEV; + /* Compute text length. */ + gctx->textlen = req->cryptlen - (enc ? 0 : gctx->authsize); + /* Empty messages are not supported yet */ if (!gctx->textlen && !req->assoclen) return -EINVAL; rctx->mode = AES_FLAGS_GCM | mode; - return mtk_aes_handle_queue(cryp, !!(mode & AES_FLAGS_ENCRYPT), - &req->base); + return mtk_aes_handle_queue(cryp, enc, &req->base); } /* |