On 2017-09-12 13:28, Daniel P. Berrange wrote:
> Instead of sector offset, take the bytes offset when encrypting
> or decrypting data.
> 
> Signed-off-by: Daniel P. Berrange <berra...@redhat.com>
> ---
>  block/crypto.c         | 12 ++++--------
>  block/qcow.c           |  7 +++++--
>  block/qcow2-cluster.c  |  8 +++-----
>  block/qcow2.c          |  4 ++--
>  crypto/block-luks.c    | 12 ++++++++----
>  crypto/block-qcow.c    | 12 ++++++++----
>  crypto/block.c         | 20 ++++++++++++++------
>  crypto/blockpriv.h     |  4 ++--
>  include/crypto/block.h | 14 ++++++++------
>  9 files changed, 54 insertions(+), 39 deletions(-)

[...]

> diff --git a/block/qcow.c b/block/qcow.c
> index f450b00cfc..d242301ed2 100644
> --- a/block/qcow.c
> +++ b/block/qcow.c
> @@ -478,7 +478,9 @@ static int get_cluster_offset(BlockDriverState *bs,
>                      for(i = 0; i < s->cluster_sectors; i++) {
>                          if (i < n_start || i >= n_end) {
>                              memset(s->cluster_data, 0x00, 512);
> -                            if (qcrypto_block_encrypt(s->crypto, start_sect 
> + i,
> +                            if (qcrypto_block_encrypt(s->crypto,
> +                                                      (start_sect + i) *
> +                                                      BDRV_SECTOR_SIZE,
>                                                        s->cluster_data,
>                                                        BDRV_SECTOR_SIZE,
>                                                        NULL) < 0) {
> @@ -668,7 +670,8 @@ static coroutine_fn int qcow_co_readv(BlockDriverState 
> *bs, int64_t sector_num,
>              }
>              if (bs->encrypted) {
>                  assert(s->crypto);
> -                if (qcrypto_block_decrypt(s->crypto, sector_num, buf,
> +                if (qcrypto_block_decrypt(s->crypto,
> +                                          sector_num * BDRV_SECTOR_SIZE, buf,
>                                            n * BDRV_SECTOR_SIZE, NULL) < 0) {
>                      ret = -EIO;
>                      break;

There's another instance of qcrypto_block_encrypt() in qcow_co_writev()
that needs to be changed.

Max

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to