[{"id":1761102,"web_url":"http://patchwork.ozlabs.org/comment/1761102/","msgid":"<3e86a5c7-dc18-ca28-3eed-40fc6221e84d@redhat.com>","list_archive_url":null,"date":"2017-08-31T15:17:43","subject":"Re: [Qemu-devel] [PATCH v2 4/4] block: convert\n\tqcrypto_block_encrypt|decrypt to take bytes offset","submitter":{"id":6591,"url":"http://patchwork.ozlabs.org/api/people/6591/","name":"Eric Blake","email":"eblake@redhat.com"},"content":"On 08/31/2017 06:05 AM, Daniel P. Berrange wrote:\n> Instead of sector offset, take the bytes offset when encrypting\n> or decrypting data.\n> \n> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>\n> ---\n>  block/crypto.c         |  8 ++++----\n>  block/qcow.c           |  7 +++++--\n>  block/qcow2-cluster.c  |  8 +++-----\n>  block/qcow2.c          |  4 ++--\n>  crypto/block-luks.c    | 12 ++++++++----\n>  crypto/block-qcow.c    | 12 ++++++++----\n>  crypto/block.c         | 14 ++++++++------\n>  crypto/blockpriv.h     |  4 ++--\n>  include/crypto/block.h | 14 ++++++++------\n>  9 files changed, 48 insertions(+), 35 deletions(-)\n> \n> diff --git a/block/crypto.c b/block/crypto.c\n> index 40daa77188..6b8d88efbc 100644\n> --- a/block/crypto.c\n> +++ b/block/crypto.c\n> @@ -426,8 +426,8 @@ block_crypto_co_preadv(BlockDriverState *bs, uint64_t offset, uint64_t bytes,\n>              goto cleanup;\n>          }\n>  \n> -        if (qcrypto_block_decrypt(crypto->block, sector_num, cipher_data,\n> -                                  cur_bytes, NULL) < 0) {\n> +        if (qcrypto_block_decrypt(crypto->block, offset + bytes_done,\n> +                                  cipher_data, cur_bytes, NULL) < 0) {\n\nHow close are we to getting rid of even needing 'sector_num' as a variable?\n\n> +++ b/block/qcow.c\n> @@ -456,7 +456,9 @@ static uint64_t get_cluster_offset(BlockDriverState *bs,\n>                          if (i < n_start || i >= n_end) {\n>                              Error *err = NULL;\n>                              memset(s->cluster_data, 0x00, 512);\n> -                            if (qcrypto_block_encrypt(s->crypto, start_sect + i,\n> +                            if (qcrypto_block_encrypt(s->crypto,\n> +                                                      start_sect + i *\n> +                                                      BDRV_SECTOR_SIZE,\n\nUmm, not the same.  You want (start_sect + i) * BDRV_SECTOR_SIZE.\n\n> +++ b/block/qcow2-cluster.c\n> @@ -396,15 +396,13 @@ static bool coroutine_fn do_perform_cow_encrypt(BlockDriverState *bs,\n>  {\n>      if (bytes && bs->encrypted) {\n>          BDRVQcow2State *s = bs->opaque;\n> -        int64_t sector = (s->crypt_physical_offset ?\n> +        int64_t offset = (s->crypt_physical_offset ?\n>                            (cluster_offset + offset_in_cluster) :\n> -                          (src_cluster_offset + offset_in_cluster))\n> -                         >> BDRV_SECTOR_BITS;\n> +                          (src_cluster_offset + offset_in_cluster));\n>          assert((offset_in_cluster & ~BDRV_SECTOR_MASK) == 0);\n>          assert((bytes & ~BDRV_SECTOR_MASK) == 0);\n\nPre-existing, but we could use osdep.h macros here, as in QEMU_IS_ALIGNED().\n\n> +++ b/crypto/block-luks.c\n> @@ -1403,29 +1403,33 @@ static void qcrypto_block_luks_cleanup(QCryptoBlock *block)\n>  \n>  static int\n>  qcrypto_block_luks_decrypt(QCryptoBlock *block,\n> -                           uint64_t startsector,\n> +                           uint64_t offset,\n>                             uint8_t *buf,\n>                             size_t len,\n>                             Error **errp)\n>  {\n> +    assert(!(offset % QCRYPTO_BLOCK_LUKS_SECTOR_SIZE));\n> +    assert(!(len % QCRYPTO_BLOCK_LUKS_SECTOR_SIZE));\n\nAgain, QEMU_IS_ALIGNED() might be easier to read - but this time, it's\nin code you're adding.\n\nLooking forward to v3.","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx01.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=eblake@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjmGv0gnkz9s7c\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 01:18:31 +1000 (AEST)","from localhost ([::1]:56281 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnREj-0003xc-5Q\n\tfor incoming@patchwork.ozlabs.org; Thu, 31 Aug 2017 11:18:29 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:60793)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnREA-0003wA-Ku\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 11:17:56 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <eblake@redhat.com>) id 1dnRE9-0005h8-Hn\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 11:17:54 -0400","from mx1.redhat.com ([209.132.183.28]:51392)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <eblake@redhat.com>)\n\tid 1dnRE3-0005gO-St; Thu, 31 Aug 2017 11:17:48 -0400","from smtp.corp.redhat.com\n\t(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id C16AD81DFF;\n\tThu, 31 Aug 2017 15:17:46 +0000 (UTC)","from [10.10.122.186] (ovpn-122-186.rdu2.redhat.com [10.10.122.186])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id BECE5B515A;\n\tThu, 31 Aug 2017 15:17:44 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com C16AD81DFF","To":"\"Daniel P. Berrange\" <berrange@redhat.com>, qemu-devel@nongnu.org","References":"<20170831110518.10741-1-berrange@redhat.com>\n\t<20170831110518.10741-5-berrange@redhat.com>","From":"Eric Blake <eblake@redhat.com>","Openpgp":"url=http://people.redhat.com/eblake/eblake.gpg","Organization":"Red Hat, Inc.","Message-ID":"<3e86a5c7-dc18-ca28-3eed-40fc6221e84d@redhat.com>","Date":"Thu, 31 Aug 2017 10:17:43 -0500","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.3.0","MIME-Version":"1.0","In-Reply-To":"<20170831110518.10741-5-berrange@redhat.com>","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\";\n\tboundary=\"ktfl9FoCt5bqP9UECTdf3WBpEqWS0s0e7\"","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.12","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.25]);\n\tThu, 31 Aug 2017 15:17:46 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","X-Content-Filtered-By":"Mailman/MimeDel 2.1.21","Subject":"Re: [Qemu-devel] [PATCH v2 4/4] block: convert\n\tqcrypto_block_encrypt|decrypt to take bytes offset","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Kevin Wolf <kwolf@redhat.com>, Stefan Hajnoczi <stefanha@gmail.com>,\n\tqemu-block@nongnu.org, Max Reitz <mreitz@redhat.com>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1761108,"web_url":"http://patchwork.ozlabs.org/comment/1761108/","msgid":"<20170831152231.GO17315@redhat.com>","list_archive_url":null,"date":"2017-08-31T15:22:31","subject":"Re: [Qemu-devel] [PATCH v2 4/4] block: convert\n\tqcrypto_block_encrypt|decrypt to take bytes offset","submitter":{"id":2694,"url":"http://patchwork.ozlabs.org/api/people/2694/","name":"Daniel P. Berrangé","email":"berrange@redhat.com"},"content":"On Thu, Aug 31, 2017 at 10:17:43AM -0500, Eric Blake wrote:\n> On 08/31/2017 06:05 AM, Daniel P. Berrange wrote:\n> > Instead of sector offset, take the bytes offset when encrypting\n> > or decrypting data.\n> > \n> > Signed-off-by: Daniel P. Berrange <berrange@redhat.com>\n> > ---\n> >  block/crypto.c         |  8 ++++----\n> >  block/qcow.c           |  7 +++++--\n> >  block/qcow2-cluster.c  |  8 +++-----\n> >  block/qcow2.c          |  4 ++--\n> >  crypto/block-luks.c    | 12 ++++++++----\n> >  crypto/block-qcow.c    | 12 ++++++++----\n> >  crypto/block.c         | 14 ++++++++------\n> >  crypto/blockpriv.h     |  4 ++--\n> >  include/crypto/block.h | 14 ++++++++------\n> >  9 files changed, 48 insertions(+), 35 deletions(-)\n> > \n> > diff --git a/block/crypto.c b/block/crypto.c\n> > index 40daa77188..6b8d88efbc 100644\n> > --- a/block/crypto.c\n> > +++ b/block/crypto.c\n> > @@ -426,8 +426,8 @@ block_crypto_co_preadv(BlockDriverState *bs, uint64_t offset, uint64_t bytes,\n> >              goto cleanup;\n> >          }\n> >  \n> > -        if (qcrypto_block_decrypt(crypto->block, sector_num, cipher_data,\n> > -                                  cur_bytes, NULL) < 0) {\n> > +        if (qcrypto_block_decrypt(crypto->block, offset + bytes_done,\n> > +                                  cipher_data, cur_bytes, NULL) < 0) {\n> \n> How close are we to getting rid of even needing 'sector_num' as a variable?\n\nI thought there was more usage, but I just realized we can in fact\nremove it in this patch.\n\n> \n> > +++ b/block/qcow.c\n> > @@ -456,7 +456,9 @@ static uint64_t get_cluster_offset(BlockDriverState *bs,\n> >                          if (i < n_start || i >= n_end) {\n> >                              Error *err = NULL;\n> >                              memset(s->cluster_data, 0x00, 512);\n> > -                            if (qcrypto_block_encrypt(s->crypto, start_sect + i,\n> > +                            if (qcrypto_block_encrypt(s->crypto,\n> > +                                                      start_sect + i *\n> > +                                                      BDRV_SECTOR_SIZE,\n> \n> Umm, not the same.  You want (start_sect + i) * BDRV_SECTOR_SIZE.\n\nHeh, oppps.\n\n\nRegards,\nDaniel","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx03.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx03.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=berrange@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjmNX6fpyz9s83\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  1 Sep 2017 01:23:23 +1000 (AEST)","from localhost ([::1]:56301 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnRJO-0006pX-2O\n\tfor incoming@patchwork.ozlabs.org; Thu, 31 Aug 2017 11:23:18 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:34022)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dnRIt-0006p4-1R\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 11:22:51 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <berrange@redhat.com>) id 1dnRIo-0007ek-SI\n\tfor qemu-devel@nongnu.org; Thu, 31 Aug 2017 11:22:47 -0400","from mx1.redhat.com ([209.132.183.28]:50350)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <berrange@redhat.com>)\n\tid 1dnRIi-0007bV-Di; Thu, 31 Aug 2017 11:22:36 -0400","from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 2C5107E445;\n\tThu, 31 Aug 2017 15:22:35 +0000 (UTC)","from redhat.com (unknown [10.42.22.189])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id BF9F292D17;\n\tThu, 31 Aug 2017 15:22:33 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com 2C5107E445","Date":"Thu, 31 Aug 2017 16:22:31 +0100","From":"\"Daniel P. Berrange\" <berrange@redhat.com>","To":"Eric Blake <eblake@redhat.com>","Message-ID":"<20170831152231.GO17315@redhat.com>","References":"<20170831110518.10741-1-berrange@redhat.com>\n\t<20170831110518.10741-5-berrange@redhat.com>\n\t<3e86a5c7-dc18-ca28-3eed-40fc6221e84d@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<3e86a5c7-dc18-ca28-3eed-40fc6221e84d@redhat.com>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.11","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.27]);\n\tThu, 31 Aug 2017 15:22:35 +0000 (UTC)","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [PATCH v2 4/4] block: convert\n\tqcrypto_block_encrypt|decrypt to take bytes offset","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Reply-To":"\"Daniel P. Berrange\" <berrange@redhat.com>","Cc":"Kevin Wolf <kwolf@redhat.com>, Stefan Hajnoczi <stefanha@gmail.com>,\n\tqemu-devel@nongnu.org, qemu-block@nongnu.org,\n\tMax Reitz <mreitz@redhat.com>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}}]