]> www.infradead.org Git - users/willy/xarray.git/commitdiff
crypto: tegra - do not transfer req when tegra init fails
authorChen Ridong <chenridong@huawei.com>
Mon, 11 Nov 2024 01:28:27 +0000 (01:28 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 10 Dec 2024 05:44:20 +0000 (13:44 +0800)
The tegra_cmac_init or tegra_sha_init function may return an error when
memory is exhausted. It should not transfer the request when they return
an error.

Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver")
Signed-off-by: Chen Ridong <chenridong@huawei.com>
Acked-by: Akhil R <akhilrajeev@nvidia.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/tegra/tegra-se-aes.c
drivers/crypto/tegra/tegra-se-hash.c

index 9d130592cc0acd264ceb6596aaa4a24cb8673264..d734c9a567868f950966cdd39297060ccae4e256 100644 (file)
@@ -1750,10 +1750,13 @@ static int tegra_cmac_digest(struct ahash_request *req)
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
        struct tegra_cmac_ctx *ctx = crypto_ahash_ctx(tfm);
        struct tegra_cmac_reqctx *rctx = ahash_request_ctx(req);
+       int ret;
 
-       tegra_cmac_init(req);
-       rctx->task |= SHA_UPDATE | SHA_FINAL;
+       ret = tegra_cmac_init(req);
+       if (ret)
+               return ret;
 
+       rctx->task |= SHA_UPDATE | SHA_FINAL;
        return crypto_transfer_hash_request_to_engine(ctx->se->engine, req);
 }
 
index 4d4bd727f498691bba0a9777cdd7b91ef01fb8d9..0b5cdd5676b17e6f77ef9b186cd213aa092c47e5 100644 (file)
@@ -615,13 +615,16 @@ static int tegra_sha_digest(struct ahash_request *req)
        struct tegra_sha_reqctx *rctx = ahash_request_ctx(req);
        struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
        struct tegra_sha_ctx *ctx = crypto_ahash_ctx(tfm);
+       int ret;
 
        if (ctx->fallback)
                return tegra_sha_fallback_digest(req);
 
-       tegra_sha_init(req);
-       rctx->task |= SHA_UPDATE | SHA_FINAL;
+       ret = tegra_sha_init(req);
+       if (ret)
+               return ret;
 
+       rctx->task |= SHA_UPDATE | SHA_FINAL;
        return crypto_transfer_hash_request_to_engine(ctx->se->engine, req);
 }