2009-07-15 13:30:40

by Herbert Xu

[permalink] [raw]
Subject: crypto: shash - Fix async finup handling of null digest

Hi:

commit cbc86b9161b40f95caee0e56381b68956fc28cc4
Author: Herbert Xu <[email protected]>
Date: Wed Jul 15 21:26:41 2009 +0800

crypto: shash - Fix async finup handling of null digest

When shash_ahash_finup encounters a null request, we end up not
calling the underlying final function. This patch fixes that.

Signed-off-by: Herbert Xu <[email protected]>

diff --git a/crypto/shash.c b/crypto/shash.c
index 834d9d2..7713b52 100644
--- a/crypto/shash.c
+++ b/crypto/shash.c
@@ -240,12 +240,17 @@ int shash_ahash_finup(struct ahash_request *req, struct shash_desc *desc)
struct crypto_hash_walk walk;
int nbytes;

- for (nbytes = crypto_hash_walk_first(req, &walk); nbytes > 0;
- nbytes = crypto_hash_walk_done(&walk, nbytes))
+ nbytes = crypto_hash_walk_first(req, &walk);
+ if (!nbytes)
+ return crypto_shash_final(desc, req->result);
+
+ do {
nbytes = crypto_hash_walk_last(&walk) ?
crypto_shash_finup(desc, walk.data, nbytes,
req->result) :
crypto_shash_update(desc, walk.data, nbytes);
+ nbytes = crypto_hash_walk_done(&walk, nbytes);
+ } while (nbytes > 0);

return nbytes;
}

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt