crypto: qat - set to zero DH parameters before free
authorGiovanni Cabiddu <giovanni.cabiddu@intel.com>
Mon, 9 May 2022 13:19:27 +0000 (14:19 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 29 Jul 2022 15:25:27 +0000 (17:25 +0200)
[ Upstream commit 1731160ff7c7bbb11bb1aacb14dd25e18d522779 ]

Set to zero the context buffers containing the DH key before they are
freed.
This is a defense in depth measure that avoids keys to be recovered from
memory in case the system is compromised between the free of the buffer
and when that area of memory (containing keys) gets overwritten.

Cc: stable@vger.kernel.org
Fixes: c9839143ebbf ("crypto: qat - Add DH support")
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
Reviewed-by: Adam Guerin <adam.guerin@intel.com>
Reviewed-by: Wojciech Ziemba <wojciech.ziemba@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/crypto/qat/qat_common/qat_asym_algs.c

index b0b7844..5633f9d 100644 (file)
@@ -420,14 +420,17 @@ static int qat_dh_set_params(struct qat_dh_ctx *ctx, struct dh *params)
 static void qat_dh_clear_ctx(struct device *dev, struct qat_dh_ctx *ctx)
 {
        if (ctx->g) {
+               memset(ctx->g, 0, ctx->p_size);
                dma_free_coherent(dev, ctx->p_size, ctx->g, ctx->dma_g);
                ctx->g = NULL;
        }
        if (ctx->xa) {
+               memset(ctx->xa, 0, ctx->p_size);
                dma_free_coherent(dev, ctx->p_size, ctx->xa, ctx->dma_xa);
                ctx->xa = NULL;
        }
        if (ctx->p) {
+               memset(ctx->p, 0, ctx->p_size);
                dma_free_coherent(dev, ctx->p_size, ctx->p, ctx->dma_p);
                ctx->p = NULL;
        }