[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH v7 19/20] qcow2: report encryption specific imag
From: |
Eric Blake |
Subject: |
Re: [Qemu-block] [PATCH v7 19/20] qcow2: report encryption specific image information |
Date: |
Thu, 25 May 2017 14:52:30 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0 |
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 <address@hidden>
> ---
> 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
signature.asc
Description: OpenPGP digital signature
- [Qemu-block] [PATCH v7 11/20] qcow2: convert QCow2 to use QCryptoBlock for encryption, (continued)
- [Qemu-block] [PATCH v7 11/20] qcow2: convert QCow2 to use QCryptoBlock for encryption, Daniel P. Berrange, 2017/05/25
- [Qemu-block] [PATCH v7 14/20] qcow2: add iotests to cover LUKS encryption support, Daniel P. Berrange, 2017/05/25
- [Qemu-block] [PATCH v7 15/20] iotests: enable tests 134 and 158 to work with qcow (v1), Daniel P. Berrange, 2017/05/25
- [Qemu-block] [PATCH v7 13/20] qcow2: add support for LUKS encryption format, Daniel P. Berrange, 2017/05/25
- [Qemu-block] [PATCH v7 16/20] block: rip out all traces of password prompting, Daniel P. Berrange, 2017/05/25
- [Qemu-block] [PATCH v7 17/20] block: remove all encryption handling APIs, Daniel P. Berrange, 2017/05/25
- [Qemu-block] [PATCH v7 18/20] block: pass option prefix down to crypto layer, Daniel P. Berrange, 2017/05/25
- [Qemu-block] [PATCH v7 19/20] qcow2: report encryption specific image information, Daniel P. Berrange, 2017/05/25
- Re: [Qemu-block] [PATCH v7 19/20] qcow2: report encryption specific image information,
Eric Blake <=
[Qemu-block] [PATCH v7 20/20] docs: document encryption options for qcow, qcow2 and luks, Daniel P. Berrange, 2017/05/25