When allocating the per-CPU scratch buffers, we allocate the source
and destination buffers separately, but bail immediately if the second
allocation fails, without freeing the first one. Fix that.

Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
---
 crypto/scompress.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/crypto/scompress.c b/crypto/scompress.c
index 0b40d991d65f..2c07648305ad 100644
--- a/crypto/scompress.c
+++ b/crypto/scompress.c
@@ -125,8 +125,11 @@ static int crypto_scomp_alloc_all_scratches(void)
                if (!scomp_src_scratches)
                        return -ENOMEM;
                scomp_dst_scratches = crypto_scomp_alloc_scratches();
-               if (!scomp_dst_scratches)
+               if (!scomp_dst_scratches) {
+                       crypto_scomp_free_scratches(scomp_src_scratches);
+                       scomp_src_scratches = NULL;
                        return -ENOMEM;
+               }
        }
        return 0;
 }
-- 
2.11.0

Reply via email to