All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrange" <berrange@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
	Kevin Wolf <kwolf@redhat.com>, Eric Blake <eblake@redhat.com>,
	Stefan Hajnoczi <stefanha@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v3 4/7] block: don't use constant 512 as sector size in crypto driver
Date: Mon, 18 Sep 2017 16:02:13 +0100	[thread overview]
Message-ID: <20170918150213.GJ2951@redhat.com> (raw)
In-Reply-To: <c2731b1a-419e-d6cf-48a8-97755651bdf2@redhat.com>

On Sat, Sep 16, 2017 at 06:24:56PM +0200, Max Reitz wrote:
> On 2017-09-12 13:28, Daniel P. Berrange wrote:
> > Use the qcrypto_block_get_sector_size() value in the block
> > crypto driver instead of hardcoding 512 as the sector size.
> > 
> > Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> > ---
> >  block/crypto.c | 34 ++++++++++++++++++----------------
> >  1 file changed, 18 insertions(+), 16 deletions(-)
> > 
> > diff --git a/block/crypto.c b/block/crypto.c
> > index d68cbac2ac..49d6d4c058 100644
> > --- a/block/crypto.c
> > +++ b/block/crypto.c
> > @@ -392,8 +392,9 @@ block_crypto_co_readv(BlockDriverState *bs, int64_t sector_num,
> >      uint8_t *cipher_data = NULL;
> >      QEMUIOVector hd_qiov;
> >      int ret = 0;
> > +    uint64_t sector_size = qcrypto_block_get_sector_size(crypto->block);
> >      uint64_t payload_offset =
> > -        qcrypto_block_get_payload_offset(crypto->block) / 512;
> > +        qcrypto_block_get_payload_offset(crypto->block) / sector_size;
> >      assert(payload_offset < (INT64_MAX / 512));
> >  
> >      qemu_iovec_init(&hd_qiov, qiov->niov);
> > @@ -401,9 +402,9 @@ block_crypto_co_readv(BlockDriverState *bs, int64_t sector_num,
> >      /* Bounce buffer because we don't wish to expose cipher text
> >       * in qiov which points to guest memory.
> >       */
> > -    cipher_data =
> > -        qemu_try_blockalign(bs->file->bs, MIN(BLOCK_CRYPTO_MAX_SECTORS * 512,
> > -                                              qiov->size));
> > +    cipher_data = qemu_try_blockalign(
> > +        bs->file->bs, MIN(BLOCK_CRYPTO_MAX_SECTORS * sector_size,
> > +                          qiov->size));
> >      if (cipher_data == NULL) {
> >          ret = -ENOMEM;
> >          goto cleanup;
> > @@ -417,7 +418,7 @@ block_crypto_co_readv(BlockDriverState *bs, int64_t sector_num,
> >          }
> >  
> >          qemu_iovec_reset(&hd_qiov);
> > -        qemu_iovec_add(&hd_qiov, cipher_data, cur_nr_sectors * 512);
> > +        qemu_iovec_add(&hd_qiov, cipher_data, cur_nr_sectors * sector_size);
> 
> cur_nr_sectors is based on remaining_sectors; which in turn is a
> parameter to this function and comes from the block layer.  Therefore
> its unit is BDRV_SECTOR_SIZE and not the crypto driver's sector size.
> 
> Same in the hunk below, and in block_crypto_co_writev().
> 
> >  
> >          ret = bdrv_co_readv(bs->file,
> >                              payload_offset + sector_num,
> 
> Same thing here, albeit in a different variation: The unit of this
> parameter of bdrv_co_readv() (start sector index) is a block layer
> sector, whose size is always BDRV_SECTOR_SIZE.
> 
> Therefore you cannot divide the result from
> qcrypto_block_get_payload_offset() by the crypto driver's sector size
> and then use it as a sector index here.
> 
> Same in block_crypto_co_writev().
> 
> 
> I assume that you fix this in the next patch, but for now it's just wrong.

Yeah, in retrospect I should have kept this patch using BDRV_SECTOR_SIZE
throughout as previous versions had it, so I'm going to go back to doing
that. Only use the encryption sector size in a later patch where we have
already switched to doing byte based I/O.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

  reply	other threads:[~2017-09-18 15:02 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-12 11:28 [Qemu-devel] [PATCH v3 0/7] Misc improvements to crypto block driver Daniel P. Berrange
2017-09-12 11:28 ` [Qemu-devel] [PATCH v3 1/7] block: use 1 MB bounce buffers for crypto instead of 16KB Daniel P. Berrange
2017-09-16 16:25   ` Max Reitz
2017-09-12 11:28 ` [Qemu-devel] [PATCH v3 2/7] crypto: expose encryption sector size in APIs Daniel P. Berrange
2017-09-16 16:25   ` Max Reitz
2017-09-18 13:53   ` Eric Blake
2017-09-12 11:28 ` [Qemu-devel] [PATCH v3 3/7] block: fix data type casting for crypto payload offset Daniel P. Berrange
2017-09-16 16:25   ` Max Reitz
2017-09-18 13:56   ` Eric Blake
2017-09-12 11:28 ` [Qemu-devel] [PATCH v3 4/7] block: don't use constant 512 as sector size in crypto driver Daniel P. Berrange
2017-09-16 16:24   ` Max Reitz
2017-09-18 15:02     ` Daniel P. Berrange [this message]
2017-09-18 13:57   ` Eric Blake
2017-09-12 11:28 ` [Qemu-devel] [PATCH v3 5/7] block: convert crypto driver to bdrv_co_preadv|pwritev Daniel P. Berrange
2017-09-12 12:06   ` Daniel P. Berrange
2017-09-16 16:54   ` Max Reitz
2017-09-27 12:34     ` Daniel P. Berrange
2017-09-12 11:28 ` [Qemu-devel] [PATCH v3 6/7] block: convert qcrypto_block_encrypt|decrypt to take bytes offset Daniel P. Berrange
2017-09-16 17:13   ` Max Reitz
2017-09-12 11:28 ` [Qemu-devel] [PATCH v3 7/7] block: support passthrough of BDRV_REQ_FUA in crypto driver Daniel P. Berrange
2017-09-16 17:18   ` Max Reitz
2017-09-18 14:02   ` Eric Blake
2017-09-12 11:49 ` [Qemu-devel] [PATCH v3 0/7] Misc improvements to crypto block driver no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170918150213.GJ2951@redhat.com \
    --to=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.