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
Attachment:
signature.asc
Description: This is a digitally signed message part