Skip to content

Commit

Permalink
[CRYPTO] geode: use consistent IV copy
Browse files Browse the repository at this point in the history
It is enough if the IV is copied before and after the while loop.
With DM-Crypt is seems not be required to save the IV after encrytion
because a new one is used in the request (dunno about other users).
It is not save to load the IV within while loop and not save afterwards
because we mill end up with the wrong IV if the request goes consists
of more than one page.

Signed-off-by: Sebastian Siewior <sebastian@breakpoint.cc>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
  • Loading branch information
Sebastian Siewior authored and Herbert Xu committed Jan 10, 2008
1 parent 89e1265 commit 2d506d4
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions drivers/crypto/geode-aes.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ geode_cbc_decrypt(struct blkcipher_desc *desc,

blkcipher_walk_init(&walk, dst, src, nbytes);
err = blkcipher_walk_virt(desc, &walk);
memcpy(op->iv, walk.iv, AES_IV_LENGTH);

while((nbytes = walk.nbytes)) {
op->src = walk.src.virt.addr,
Expand All @@ -234,16 +235,13 @@ geode_cbc_decrypt(struct blkcipher_desc *desc,
op->len = nbytes - (nbytes % AES_MIN_BLOCK_SIZE);
op->dir = AES_DIR_DECRYPT;

memcpy(op->iv, walk.iv, AES_IV_LENGTH);

ret = geode_aes_crypt(op);

memcpy(walk.iv, op->iv, AES_IV_LENGTH);
nbytes -= ret;

err = blkcipher_walk_done(desc, &walk, nbytes);
}

memcpy(walk.iv, op->iv, AES_IV_LENGTH);
return err;
}

Expand All @@ -258,6 +256,7 @@ geode_cbc_encrypt(struct blkcipher_desc *desc,

blkcipher_walk_init(&walk, dst, src, nbytes);
err = blkcipher_walk_virt(desc, &walk);
memcpy(op->iv, walk.iv, AES_IV_LENGTH);

while((nbytes = walk.nbytes)) {
op->src = walk.src.virt.addr,
Expand All @@ -266,13 +265,12 @@ geode_cbc_encrypt(struct blkcipher_desc *desc,
op->len = nbytes - (nbytes % AES_MIN_BLOCK_SIZE);
op->dir = AES_DIR_ENCRYPT;

memcpy(op->iv, walk.iv, AES_IV_LENGTH);

ret = geode_aes_crypt(op);
nbytes -= ret;
err = blkcipher_walk_done(desc, &walk, nbytes);
}

memcpy(walk.iv, op->iv, AES_IV_LENGTH);
return err;
}

Expand Down

0 comments on commit 2d506d4

Please sign in to comment.