summaryrefslogtreecommitdiffstats
path: root/crypto/scompress.c
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2017-07-21 17:42:37 +0200
committerHerbert Xu <herbert@gondor.apana.org.au>2017-08-03 07:52:44 +0200
commitcc4d110ec824d3f05f95b1f705158afc6fb08773 (patch)
tree8c09c9f195f61aca2f240efc71dd229cf50e38ed /crypto/scompress.c
parentcrypto: scompress - don't sleep with preemption disabled (diff)
downloadlinux-cc4d110ec824d3f05f95b1f705158afc6fb08773.tar.xz
linux-cc4d110ec824d3f05f95b1f705158afc6fb08773.zip
crypto: scompress - free partially allocated scratch buffers on failure
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.biesheuvel@linaro.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/scompress.c')
-rw-r--r--crypto/scompress.c5
1 files changed, 4 insertions, 1 deletions
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;
}