diff options
| -rw-r--r-- | crypto/authenc.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/crypto/authenc.c b/crypto/authenc.c index 05eb32e0d94..b9884ee0adb 100644 --- a/crypto/authenc.c +++ b/crypto/authenc.c @@ -181,6 +181,7 @@ static void authenc_verify_ahash_update_done(struct crypto_async_request *areq,  	struct crypto_authenc_ctx *ctx = crypto_aead_ctx(authenc);  	struct authenc_request_ctx *areq_ctx = aead_request_ctx(req);  	struct ahash_request *ahreq = (void *)(areq_ctx->tail + ctx->reqoff); +	unsigned int cryptlen = req->cryptlen;  	if (err)  		goto out; @@ -196,6 +197,7 @@ static void authenc_verify_ahash_update_done(struct crypto_async_request *areq,  		goto out;  	authsize = crypto_aead_authsize(authenc); +	cryptlen -= authsize;  	ihash = ahreq->result + authsize;  	scatterwalk_map_and_copy(ihash, areq_ctx->sg, areq_ctx->cryptlen,  				 authsize, 0); @@ -209,7 +211,7 @@ static void authenc_verify_ahash_update_done(struct crypto_async_request *areq,  	ablkcipher_request_set_callback(abreq, aead_request_flags(req),  					req->base.complete, req->base.data);  	ablkcipher_request_set_crypt(abreq, req->src, req->dst, -				     req->cryptlen, req->iv); +				     cryptlen, req->iv);  	err = crypto_ablkcipher_decrypt(abreq); @@ -228,11 +230,13 @@ static void authenc_verify_ahash_done(struct crypto_async_request *areq,  	struct crypto_authenc_ctx *ctx = crypto_aead_ctx(authenc);  	struct authenc_request_ctx *areq_ctx = aead_request_ctx(req);  	struct ahash_request *ahreq = (void *)(areq_ctx->tail + ctx->reqoff); +	unsigned int cryptlen = req->cryptlen;  	if (err)  		goto out;  	authsize = crypto_aead_authsize(authenc); +	cryptlen -= authsize;  	ihash = ahreq->result + authsize;  	scatterwalk_map_and_copy(ihash, areq_ctx->sg, areq_ctx->cryptlen,  				 authsize, 0); @@ -246,7 +250,7 @@ static void authenc_verify_ahash_done(struct crypto_async_request *areq,  	ablkcipher_request_set_callback(abreq, aead_request_flags(req),  					req->base.complete, req->base.data);  	ablkcipher_request_set_crypt(abreq, req->src, req->dst, -				     req->cryptlen, req->iv); +				     cryptlen, req->iv);  	err = crypto_ablkcipher_decrypt(abreq);  |