X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=crypto%2Fscompress.c;h=b108a30a7600140e5ed616b84431d4031fc905e4;hb=refs%2Fheads%2Faccepted%2Ftizen_unified_x;hp=442a82c9de7def1f876045d6204da9733c9a5994;hpb=fa56e0e44f658085262f536bbfdfff3374b8828d;p=platform%2Fkernel%2Flinux-rpi.git diff --git a/crypto/scompress.c b/crypto/scompress.c index 442a82c..b108a30 100644 --- a/crypto/scompress.c +++ b/crypto/scompress.c @@ -117,6 +117,7 @@ static int scomp_acomp_comp_decomp(struct acomp_req *req, int dir) struct crypto_scomp *scomp = *tfm_ctx; void **ctx = acomp_request_ctx(req); struct scomp_scratch *scratch; + unsigned int dlen; int ret; if (!req->src || !req->slen || req->slen > SCOMP_SCRATCH_SIZE) @@ -128,6 +129,8 @@ static int scomp_acomp_comp_decomp(struct acomp_req *req, int dir) if (!req->dlen || req->dlen > SCOMP_SCRATCH_SIZE) req->dlen = SCOMP_SCRATCH_SIZE; + dlen = req->dlen; + scratch = raw_cpu_ptr(&scomp_scratch); spin_lock(&scratch->lock); @@ -145,6 +148,9 @@ static int scomp_acomp_comp_decomp(struct acomp_req *req, int dir) ret = -ENOMEM; goto out; } + } else if (req->dlen > dlen) { + ret = -ENOSPC; + goto out; } scatterwalk_map_and_copy(scratch->dst, req->dst, 0, req->dlen, 1);