qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 1/2] crypto: add support for querying paramet


From: Max Reitz
Subject: Re: [Qemu-devel] [PATCH v2 1/2] crypto: add support for querying parameters for block encryption
Date: Tue, 14 Jun 2016 17:30:03 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1

On 14.06.2016 12:56, Daniel P. Berrange wrote:
> When creating new block encryption volumes, we accept a list of
> parameters to control the formatting process. It is useful to
> be able to query what those parameters were for existing block
> devices. Add a qcrypto_block_get_info() method which returns a
> QCryptoBlockInfo instance to report this data.
> 
> Signed-off-by: Daniel P. Berrange <address@hidden>
> ---
>  crypto/block-luks.c    | 70 ++++++++++++++++++++++++++++++++++++++++++++++
>  crypto/block.c         | 17 +++++++++++
>  crypto/blockpriv.h     |  4 +++
>  include/crypto/block.h | 16 +++++++++++
>  qapi/crypto.json       | 76 
> ++++++++++++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 183 insertions(+)
> 
> diff --git a/crypto/block-luks.c b/crypto/block-luks.c
> index 63649f1..6a6ef07 100644
> --- a/crypto/block-luks.c
> +++ b/crypto/block-luks.c

[...]

> @@ -1284,6 +1305,54 @@ qcrypto_block_luks_create(QCryptoBlock *block,
>  }
>  
>  
> +static int qcrypto_block_luks_get_info(QCryptoBlock *block,
> +                                       QCryptoBlockInfo *info,
> +                                       Error **errp)
> +{
> +    QCryptoBlockLUKS *luks = block->opaque;
> +    QCryptoBlockInfoLUKSSlot *slot;
> +    QCryptoBlockInfoLUKSSlotList *slots = NULL, *prev = NULL;

You could make prev a double pointer, initializing it to
&info->u.luks.slots... [1]

> +    size_t i;
> +
> +    info->u.luks.cipher_alg = luks->cipher_alg;
> +    info->u.luks.cipher_mode = luks->cipher_mode;
> +    info->u.luks.ivgen_alg = luks->ivgen_alg;
> +    if (info->u.luks.ivgen_alg == QCRYPTO_IVGEN_ALG_ESSIV) {
> +        info->u.luks.has_ivgen_hash_alg = true;
> +        info->u.luks.ivgen_hash_alg = luks->ivgen_hash_alg;
> +    }
> +    info->u.luks.hash_alg = luks->hash_alg;
> +    info->u.luks.payload_offset = block->payload_offset;
> +    info->u.luks.master_key_iters = luks->header.master_key_iterations;
> +    info->u.luks.uuid = g_strdup((const char *)luks->header.uuid);

Wouldn't g_strndup() with sizeof(luks->header.uuid) be a better choice?

> +
> +    for (i = 0; i < QCRYPTO_BLOCK_LUKS_NUM_KEY_SLOTS; i++) {
> +        slots = g_new0(QCryptoBlockInfoLUKSSlotList, 1);
> +        if (i == 0) {
> +            info->u.luks.slots = slots;
> +        } else {
> +            prev->next = slots;
> +        }

[1] ...then unconditionally use *prev = slots here...

> +
> +        slots->value = slot = g_new0(QCryptoBlockInfoLUKSSlot, 1);
> +        slot->active = luks->header.key_slots[i].active ==
> +            QCRYPTO_BLOCK_LUKS_KEY_SLOT_ENABLED;
> +        slot->key_offset = luks->header.key_slots[i].key_offset
> +             * QCRYPTO_BLOCK_LUKS_SECTOR_SIZE;
> +        if (slot->active) {
> +            slot->has_iters = true;
> +            slot->iters = luks->header.key_slots[i].iterations;
> +            slot->has_stripes = true;
> +            slot->stripes = luks->header.key_slots[i].stripes;
> +        }
> +
> +        prev = slots;

[1] ...and prev = &slots->next here.

> +    }
> +
> +    return 0;
> +}
> +
> +
>  static void qcrypto_block_luks_cleanup(QCryptoBlock *block)
>  {
>      g_free(block->opaque);

[...]

> diff --git a/include/crypto/block.h b/include/crypto/block.h
> index a21e11f..6256f64 100644
> --- a/include/crypto/block.h
> +++ b/include/crypto/block.h
> @@ -138,6 +138,22 @@ QCryptoBlock 
> *qcrypto_block_create(QCryptoBlockCreateOptions *options,
>                                     void *opaque,
>                                     Error **errp);
>  
> +
> +/**
> + * qcrypto_block_get_info:
> + * block: the block encryption object

I think this is missing an @.

Max

> + * @errp: pointer to a NULL-initialized error object
> + *
> + * Get information about the configuration options for the
> + * block encryption object. This includes details such as
> + * the cipher algorithms, modes, and initialization vector
> + * generators.
> + *
> + * Returns: a block encryption info object, or NULL on error
> + */
> +QCryptoBlockInfo *qcrypto_block_get_info(QCryptoBlock *block,
> +                                         Error **errp);
> +
>  /**
>   * @qcrypto_block_decrypt:
>   * @block: the block encryption object


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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