crypto: blkcipher - Fix WARN_ON handling in walk_done
authorHerbert Xu <herbert@gondor.apana.org.au>
Fri, 16 Jan 2009 03:40:54 +0000 (14:40 +1100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 27 Jan 2009 06:11:13 +0000 (17:11 +1100)
When we get left-over bits from a slow walk, it means that the
underlying cipher has gone troppo.  However, as we're handling
that case we should ensure that the caller terminates the walk.

This patch does this by setting walk->nbytes to zero.

Reported-by: Roel Kluin <roel.kluin@gmail.com>
Reported-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/blkcipher.c

index 4a7e65c4df4dc3ac6af007efa1d136e1232be053..d70a41c002df192e49f77871cd0837732fbad861 100644 (file)
@@ -124,6 +124,7 @@ int blkcipher_walk_done(struct blkcipher_desc *desc,
        scatterwalk_done(&walk->in, 0, nbytes);
        scatterwalk_done(&walk->out, 1, nbytes);
 
+err:
        walk->total = nbytes;
        walk->nbytes = nbytes;
 
@@ -132,7 +133,6 @@ int blkcipher_walk_done(struct blkcipher_desc *desc,
                return blkcipher_walk_next(desc, walk);
        }
 
-err:
        if (walk->iv != desc->info)
                memcpy(desc->info, walk->iv, crypto_blkcipher_ivsize(tfm));
        if (walk->buffer != walk->page)