crypto: crypto4xx - fix double-free in crypto4xx_destroy_sdr
authorChristian Lamparter <chunkeey@gmail.com>
Thu, 31 Oct 2019 16:14:38 +0000 (17:14 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 21 Dec 2019 09:41:39 +0000 (10:41 +0100)
commit 746c908c4d72e49068ab216c3926d2720d71a90d upstream.

This patch fixes a crash that can happen during probe
when the available dma memory is not enough (this can
happen if the crypto4xx is built as a module).

The descriptor window mapping would end up being free'd
twice, once in crypto4xx_build_pdr() and the second time
in crypto4xx_destroy_sdr().

Fixes: 5d59ad6eea82 ("crypto: crypto4xx - fix crypto4xx_build_pdr, crypto4xx_build_sdr leak")
Cc: <stable@vger.kernel.org>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/crypto/amcc/crypto4xx_core.c

index 7d066fa9f2ade4915faa8ea1e246d6d15f6d8f70..e5e83c6de5360a35301d783b3961bbbe91b05580 100644 (file)
@@ -400,12 +400,8 @@ static u32 crypto4xx_build_sdr(struct crypto4xx_device *dev)
                dma_alloc_coherent(dev->core_dev->device,
                        dev->scatter_buffer_size * PPC4XX_NUM_SD,
                        &dev->scatter_buffer_pa, GFP_ATOMIC);
-       if (!dev->scatter_buffer_va) {
-               dma_free_coherent(dev->core_dev->device,
-                                 sizeof(struct ce_sd) * PPC4XX_NUM_SD,
-                                 dev->sdr, dev->sdr_pa);
+       if (!dev->scatter_buffer_va)
                return -ENOMEM;
-       }
 
        sd_array = dev->sdr;