qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: "Daniel P. Berrange" <berrange@redhat.com>, qemu-devel@nongnu.org
Cc: qemu-block@nongnu.org, Max Reitz <mreitz@redhat.com>,
	Kevin Wolf <kwolf@redhat.com>, Alberto Garcia <berto@igalia.com>,
	Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v7 19/20] qcow2: report encryption specific image information
Date: Thu, 25 May 2017 14:52:30 -0500	[thread overview]
Message-ID: <1acec55c-fd89-ee9d-0082-372a6e967036@redhat.com> (raw)
In-Reply-To: <20170525163851.8047-20-berrange@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3579 bytes --]

On 05/25/2017 11:38 AM, Daniel P. Berrange wrote:
> Currently 'qemu-img info' reports a simple "encrypted: yes"
> field. This is not very useful now that qcow2 can support
> multiple encryption formats. Users want to know which format
> is in use and some data related to it.
> 
> Wire up usage of the qcrypto_block_get_info() method so that
> 'qemu-img info' can report about the encryption format
> and parameters in use
> 

> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
>  block/qcow2.c        | 35 ++++++++++++++++++++++++++++++++++-
>  qapi/block-core.json | 24 +++++++++++++++++++++++-
>  2 files changed, 57 insertions(+), 2 deletions(-)
> 
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 38f9eb5..cb321a2 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -3196,8 +3196,17 @@ static int qcow2_get_info(BlockDriverState *bs, BlockDriverInfo *bdi)
>  static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs)
>  {
>      BDRVQcow2State *s = bs->opaque;
> -    ImageInfoSpecific *spec_info = g_new(ImageInfoSpecific, 1);
> +    ImageInfoSpecific *spec_info;
> +    QCryptoBlockInfo *encrypt_info = NULL;
>  
> +    if (s->crypto != NULL) {
> +        encrypt_info = qcrypto_block_get_info(s->crypto, NULL);

Worth using &error_abort instead of silently ignoring the error?  Is an
error even possible in our output visitor [adding Markus for reference]?

> +        if (!encrypt_info) {
> +            return NULL;
> +        }

If you use &error_abort, this is a dead check.

> +    }
> +
> +    spec_info = g_new(ImageInfoSpecific, 1);
>      *spec_info = (ImageInfoSpecific){
>          .type  = IMAGE_INFO_SPECIFIC_KIND_QCOW2,
>          .u.qcow2.data = g_new(ImageInfoSpecificQCow2, 1),
> @@ -3224,6 +3233,30 @@ static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs)
>          assert(false);
>      }
>  
> +    if (encrypt_info) {
> +        ImageInfoSpecificQCow2Encryption *qencrypt =
> +            g_new(ImageInfoSpecificQCow2Encryption, 1);
> +        switch (encrypt_info->format) {
> +        case Q_CRYPTO_BLOCK_FORMAT_QCOW:
> +            qencrypt->format = BLOCKDEV_QCOW2_ENCRYPTION_FORMAT_AES;
> +            qencrypt->u.aes = encrypt_info->u.qcow;
> +            break;
> +        case Q_CRYPTO_BLOCK_FORMAT_LUKS:
> +            qencrypt->format = BLOCKDEV_QCOW2_ENCRYPTION_FORMAT_LUKS;
> +            qencrypt->u.luks = encrypt_info->u.luks;
> +            break;
> +        default:
> +            assert(false);
> +        }
> +        /* Since we did shallow copy above, erase any pointers
> +         * in the original info */
> +        memset(&encrypt_info->u, 0, sizeof(encrypt_info->u));
> +        qapi_free_QCryptoBlockInfo(encrypt_info);

Does QAPI_CLONE_MEMBERS (commit 4626a19c) make this code any easier to
write?  Then again, malloc'ing duplicates to then free the unchanged
original is a bit slower than stealing references from the original then
making sure the original can be freed without problem.

>  # @ImageInfoSpecificQCow2:
>  #
>  # @compat: compatibility level
> @@ -51,7 +72,8 @@
>        'compat': 'str',
>        '*lazy-refcounts': 'bool',
>        '*corrupt': 'bool',
> -      'refcount-bits': 'int'
> +      'refcount-bits': 'int',
> +      '*encrypt': 'ImageInfoSpecificQCow2Encryption'

Missing documentation of the @encrypt field.

Close!

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

  reply	other threads:[~2017-05-25 19:52 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-25 16:38 [Qemu-devel] [PATCH v7 00/20] Convert QCow[2] to QCryptoBlock & add LUKS support Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 01/20] block: expose crypto option names / defs to other drivers Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 02/20] block: add ability to set a prefix for opt names Daniel P. Berrange
2017-05-25 19:21   ` Eric Blake
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 03/20] qcow: document another weakness of qcow AES encryption Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 04/20] qcow: require image size to be > 1 for new images Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 05/20] iotests: skip 042 with qcow which dosn't support zero sized images Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 06/20] iotests: skip 048 with qcow which doesn't support resize Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 07/20] block: deprecate "encryption=on" in favor of "encrypt.format=aes" Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 08/20] qcow: make encrypt_sectors encrypt in place Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 09/20] qcow: convert QCow to use QCryptoBlock for encryption Daniel P. Berrange
2017-05-26 12:03   ` Alberto Garcia
2017-05-26 13:53     ` Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 10/20] qcow2: make qcow2_encrypt_sectors encrypt in place Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 11/20] qcow2: convert QCow2 to use QCryptoBlock for encryption Daniel P. Berrange
2017-05-26 12:07   ` Alberto Garcia
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 12/20] qcow2: extend specification to cover LUKS encryption Daniel P. Berrange
2017-05-25 19:39   ` Eric Blake
2017-05-26 13:57     ` Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 13/20] qcow2: add support for LUKS encryption format Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 14/20] qcow2: add iotests to cover LUKS encryption support Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 15/20] iotests: enable tests 134 and 158 to work with qcow (v1) Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 16/20] block: rip out all traces of password prompting Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 17/20] block: remove all encryption handling APIs Daniel P. Berrange
2017-05-29 13:47   ` Alberto Garcia
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 18/20] block: pass option prefix down to crypto layer Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 19/20] qcow2: report encryption specific image information Daniel P. Berrange
2017-05-25 19:52   ` Eric Blake [this message]
2017-05-26 14:02     ` Daniel P. Berrange
2017-05-29  9:53       ` Markus Armbruster
2017-05-30  9:16         ` Daniel P. Berrange
2017-05-25 16:38 ` [Qemu-devel] [PATCH v7 20/20] docs: document encryption options for qcow, qcow2 and luks Daniel P. Berrange
2017-05-25 19:32   ` Eric Blake
2017-05-29 13:53   ` Alberto Garcia

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=1acec55c-fd89-ee9d-0082-372a6e967036@redhat.com \
    --to=eblake@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=berto@igalia.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).