From: Szilveszter Ördög Date: Wed, 3 Mar 2010 00:03:23 +0000 (+0800) Subject: crypto: hash - Fix handling of unaligned buffers X-Git-Tag: upstream/snapshot3+hdmi~14756^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cbb9bf65ae25dee772e85589136e7dd1c3e743ae;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git crypto: hash - Fix handling of unaligned buffers The correct way to calculate the start of the aligned part of an unaligned buffer is: offset = ALIGN(offset, alignmask + 1); However, crypto_hash_walk_done() has: offset += alignmask - 1; offset = ALIGN(offset, alignmask + 1); which actually skips a whole block unless offset % (alignmask + 1) == 1. This patch fixes the problem. Signed-off-by: Szilveszter Ördög Signed-off-by: Herbert Xu --- diff --git a/crypto/ahash.c b/crypto/ahash.c index 33a4ff4..b8c59b8 100644 --- a/crypto/ahash.c +++ b/crypto/ahash.c @@ -78,7 +78,6 @@ int crypto_hash_walk_done(struct crypto_hash_walk *walk, int err) walk->data -= walk->offset; if (nbytes && walk->offset & alignmask && !err) { - walk->offset += alignmask - 1; walk->offset = ALIGN(walk->offset, alignmask + 1); walk->data += walk->offset;