On Thu, 2009-01-15 at 17:47 +0800, roel kluin wrote:
> Sorry to bother,
>
> > +static int ecb_encrypt(struct blkcipher_desc *desc,
> > + struct scatterlist *dst, struct scatterlist *src,
> > + unsigned int nbytes)
> > +{
> > + struct crypto_aes_ctx *ctx =
> > aes_ctx(crypto_blkcipher_ctx(desc->tfm));
> > + struct blkcipher_walk walk;
> > + int err;
> > +
> > + blkcipher_walk_init(&walk, dst, src, nbytes);
> > + err = blkcipher_walk_virt(desc, &walk);
> > +
> > + kernel_fpu_begin();
> > + while ((nbytes = walk.nbytes)) {
> > + aesni_ecb_enc(ctx, walk.dst.virt.addr, walk.src.virt.addr,
> > + nbytes & AES_BLOCK_MASK);
> > + nbytes &= AES_BLOCK_SIZE - 1;
> > + err = blkcipher_walk_done(desc, &walk, nbytes);
> > + }
> > + kernel_fpu_end();
> > +
> > + return err;
> > +}
>
> if blkcipher_walk_{virt,done} returns an error, don't we have to break
> out of the loop?
> i.e.
>
> while (!err && (nbytes = walk.nbytes))
>
> (if that's erroneous, it occurs in other places as well)It seems that it is a bug. But it seems that the similar code in geode-aes.c and padlock-aes.c has same bug. I think we should fix them too. Best Regards, Huang Ying
signature.asc
Description: This is a digitally signed message part
