qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 11/17] qcow2: make qcow2_encrypt_sectors encr


From: Fam Zheng
Subject: Re: [Qemu-devel] [PATCH v2 11/17] qcow2: make qcow2_encrypt_sectors encrypt in place
Date: Thu, 21 Jan 2016 17:13:39 +0800
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, 01/20 17:38, Daniel P. Berrange wrote:
> Instead of requiring separate input/output buffers for
> encrypting data, change qcow2_encrypt_sectors() to assume
> use of a single buffer, encrypting in place. The current
> callers all used the same buffer for input/output already.
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>
> ---
>  block/qcow2-cluster.c | 17 +++++------------
>  block/qcow2.c         |  5 ++---
>  block/qcow2.h         |  3 +--
>  3 files changed, 8 insertions(+), 17 deletions(-)
> 
> diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
> index 34112c3..f5bc4f2 100644
> --- a/block/qcow2-cluster.c
> +++ b/block/qcow2-cluster.c
> @@ -341,12 +341,8 @@ static int count_contiguous_clusters_by_type(int 
> nb_clusters,
>      return i;
>  }
>  
> -/* The crypt function is compatible with the linux cryptoloop
> -   algorithm for < 4 GB images. NOTE: out_buf == in_buf is
> -   supported */
>  int qcow2_encrypt_sectors(BDRVQcow2State *s, int64_t sector_num,
> -                          uint8_t *out_buf, const uint8_t *in_buf,
> -                          int nb_sectors, bool enc,
> +                          uint8_t *buf, int nb_sectors, bool enc,
>                            Error **errp)
>  {
>      union {
> @@ -366,14 +362,12 @@ int qcow2_encrypt_sectors(BDRVQcow2State *s, int64_t 
> sector_num,
>          }
>          if (enc) {
>              ret = qcrypto_cipher_encrypt(s->cipher,
> -                                         in_buf,
> -                                         out_buf,
> +                                         buf, buf,
>                                           512,
>                                           errp);
>          } else {
>              ret = qcrypto_cipher_decrypt(s->cipher,
> -                                         in_buf,
> -                                         out_buf,
> +                                         buf, buf,
>                                           512,
>                                           errp);
>          }
> @@ -381,8 +375,7 @@ int qcow2_encrypt_sectors(BDRVQcow2State *s, int64_t 
> sector_num,
>              return -1;
>          }
>          sector_num++;
> -        in_buf += 512;
> -        out_buf += 512;
> +        buf += 512;
>      }
>      return 0;
>  }
> @@ -430,7 +423,7 @@ static int coroutine_fn copy_sectors(BlockDriverState *bs,
>          Error *err = NULL;
>          assert(s->cipher);
>          if (qcow2_encrypt_sectors(s, start_sect + n_start,
> -                                  iov.iov_base, iov.iov_base, n,
> +                                  iov.iov_base, n,
>                                    true, &err) < 0) {
>              ret = -EIO;
>              error_free(err);
> diff --git a/block/qcow2.c b/block/qcow2.c
> index d992e7f..2fae692 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -1504,7 +1504,7 @@ static coroutine_fn int qcow2_co_readv(BlockDriverState 
> *bs, int64_t sector_num,
>                  assert(s->cipher);
>                  Error *err = NULL;
>                  if (qcow2_encrypt_sectors(s, sector_num,  cluster_data,
> -                                          cluster_data, cur_nr_sectors, 
> false,
> +                                          cur_nr_sectors, false,
>                                            &err) < 0) {
>                      error_free(err);
>                      ret = -EIO;
> @@ -1604,8 +1604,7 @@ static coroutine_fn int 
> qcow2_co_writev(BlockDriverState *bs,
>              qemu_iovec_to_buf(&hd_qiov, 0, cluster_data, hd_qiov.size);
>  
>              if (qcow2_encrypt_sectors(s, sector_num, cluster_data,
> -                                      cluster_data, cur_nr_sectors,
> -                                      true, &err) < 0) {
> +                                      cur_nr_sectors, true, &err) < 0) {
>                  error_free(err);
>                  ret = -EIO;
>                  goto fail;
> diff --git a/block/qcow2.h b/block/qcow2.h
> index a063a3c..ae04285 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -540,8 +540,7 @@ int qcow2_write_l1_entry(BlockDriverState *bs, int 
> l1_index);
>  void qcow2_l2_cache_reset(BlockDriverState *bs);
>  int qcow2_decompress_cluster(BlockDriverState *bs, uint64_t cluster_offset);
>  int qcow2_encrypt_sectors(BDRVQcow2State *s, int64_t sector_num,
> -                          uint8_t *out_buf, const uint8_t *in_buf,
> -                          int nb_sectors, bool enc, Error **errp);
> +                          uint8_t *buf, int nb_sectors, bool enc, Error 
> **errp);
>  
>  int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset,
>      int *num, uint64_t *cluster_offset);
> -- 
> 2.5.0
> 

Reviewed-by: Fam Zheng <address@hidden>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]