crypto: starfive - Pad adata with zeroes
authorJia Jie Ho <jiajie.ho@starfivetech.com>
Mon, 20 Nov 2023 03:12:42 +0000 (11:12 +0800)
committerJaehoon Chung <jh80.chung@samsung.com>
Mon, 19 Feb 2024 00:14:00 +0000 (09:14 +0900)
Aad requires padding with zeroes up to 15 bytes in some cases. This
patch increases the allocated buffer size for aad and prevents the
driver accessing uninitialized memory region.

v1->v2: Specify reason for alloc size change in descriptions.

Signed-off-by: Jia Jie Ho <jiajie.ho@starfivetech.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
(cherry picked from mainline commit 8a0d929b53c383ba678ed65742e4a8982f71d5c0)
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Change-Id: I4d74dc9ce42516838cee07d039a3f13f457e5336

drivers/crypto/starfive/jh7110-aes.c

index 9378e66..e0fe599 100644 (file)
@@ -500,7 +500,7 @@ static int starfive_aes_prepare_req(struct skcipher_request *req,
        scatterwalk_start(&cryp->out_walk, rctx->out_sg);
 
        if (cryp->assoclen) {
-               rctx->adata = kzalloc(ALIGN(cryp->assoclen, AES_BLOCK_SIZE), GFP_KERNEL);
+               rctx->adata = kzalloc(cryp->assoclen + AES_BLOCK_SIZE, GFP_KERNEL);
                if (!rctx->adata)
                        return dev_err_probe(cryp->dev, -ENOMEM,
                                             "Failed to alloc memory for adata");
@@ -569,7 +569,7 @@ static int starfive_aes_aead_do_one_req(struct crypto_engine *engine, void *areq
        struct starfive_cryp_ctx *ctx =
                crypto_aead_ctx(crypto_aead_reqtfm(req));
        struct starfive_cryp_dev *cryp = ctx->cryp;
-       struct starfive_cryp_request_ctx *rctx = ctx->rctx;
+       struct starfive_cryp_request_ctx *rctx;
        u32 block[AES_BLOCK_32];
        u32 stat;
        int err;
@@ -579,6 +579,8 @@ static int starfive_aes_aead_do_one_req(struct crypto_engine *engine, void *areq
        if (err)
                return err;
 
+       rctx = ctx->rctx;
+
        if (!cryp->assoclen)
                goto write_text;