X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=crypto%2Fxcbc.c;h=b63b633e549ce7d42370c7747cdc1fbad1f8fcb8;hb=36b31106b725ac2ca4941d4ee8dbb67df72ed5dd;hp=86727403e5ab1f0e5e7bbd15f3703046f4390548;hpb=b5eb9513f7c1bee862ada22bf1489f53752686bd;p=mv-sheeva.git diff --git a/crypto/xcbc.c b/crypto/xcbc.c index 86727403e5a..b63b633e549 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; }