X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=crypto%2Fxcbc.c;h=b63b633e549ce7d42370c7747cdc1fbad1f8fcb8;hb=94aca1dac6f6d21f4b07e4864baf7768cabcc6e7;hp=86727403e5ab1f0e5e7bbd15f3703046f4390548;hpb=ab1ecbabb1c7b1599b1eb70c291407c557ea4ef3;p=pandora-kernel.git diff --git a/crypto/xcbc.c b/crypto/xcbc.c index 86727403e5ab..b63b633e549c 100644 --- a/crypto/xcbc.c +++ b/crypto/xcbc.c @@ -116,13 +116,16 @@ static int crypto_xcbc_digest_update2(struct hash_desc *pdesc, struct crypto_xcbc_ctx *ctx = crypto_hash_ctx_aligned(parent); struct crypto_cipher *tfm = ctx->child; int bs = crypto_hash_blocksize(parent); - unsigned int i = 0; - do { + for (;;) { + struct page *pg = sg_page(sg); + unsigned int offset = sg->offset; + unsigned int slen = sg->length; - struct page *pg = sg_page(&sg[i]); - unsigned int offset = sg[i].offset; - unsigned int slen = sg[i].length; + if (unlikely(slen > nbytes)) + slen = nbytes; + + nbytes -= slen; while (slen > 0) { unsigned int len = min(slen, ((unsigned int)(PAGE_SIZE)) - offset); @@ -177,9 +180,11 @@ static int crypto_xcbc_digest_update2(struct hash_desc *pdesc, offset = 0; pg++; } - nbytes-=sg[i].length; - i++; - } while (nbytes>0); + + if (!nbytes) + break; + sg = scatterwalk_sg_next(sg); + } return 0; }