From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Maxim Levitsky <mlevitsk@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Fam Zheng <fam@euphon.net>,
qemu-block@nongnu.org, Markus Armbruster <armbru@redhat.com>,
qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 06/13] qcrypto-luks: implement more rigorous header checking
Date: Thu, 22 Aug 2019 12:04:48 +0100 [thread overview]
Message-ID: <20190822110448.GK3267@redhat.com> (raw)
In-Reply-To: <20190814202219.1870-7-mlevitsk@redhat.com>
On Wed, Aug 14, 2019 at 11:22:12PM +0300, Maxim Levitsky wrote:
> Check that keyslots don't overlap with the data,
> and check that keyslots don't overlap with each other.
> (this is done using naive O(n^2) nested loops,
> but since there are just 8 keyslots, this doens't really matter.
>
> Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
> ---
> crypto/block-luks.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
>
> diff --git a/crypto/block-luks.c b/crypto/block-luks.c
> index 336e633df4..1997e92fe1 100644
> --- a/crypto/block-luks.c
> +++ b/crypto/block-luks.c
> @@ -551,6 +551,8 @@ static int
> qcrypto_block_luks_check_header(QCryptoBlockLUKS *luks, Error **errp)
> {
> int ret;
> + int i, j;
> +
>
> if (memcmp(luks->header.magic, qcrypto_block_luks_magic,
> QCRYPTO_BLOCK_LUKS_MAGIC_LEN) != 0) {
> @@ -566,6 +568,46 @@ qcrypto_block_luks_check_header(QCryptoBlockLUKS *luks, Error **errp)
> goto fail;
> }
>
> + /* Check all keyslots for corruption */
> + for (i = 0 ; i < QCRYPTO_BLOCK_LUKS_NUM_KEY_SLOTS ; i++) {
> +
> + QCryptoBlockLUKSKeySlot *slot1 = &luks->header.key_slots[i];
> + uint start1 = slot1->key_offset;
> + uint len1 = splitkeylen_sectors(luks, slot1->stripes);
Using 'uint' is not normal QEMU style.
Either use 'unsigned int' or if a specific size is needed
then one of the 'guintNN' types from glib.
This applies elsewhere in this patch series too, but
I'll only comment here & let you find the other cases.
> +
> + if (slot1->stripes == 0 ||
> + (slot1->active != QCRYPTO_BLOCK_LUKS_KEY_SLOT_DISABLED &&
> + slot1->active != QCRYPTO_BLOCK_LUKS_KEY_SLOT_ENABLED)) {
> +
Redundant blank line
> + error_setg(errp, "Keyslot %i is corrupted", i);
I'd do a separate check for stripes and active fields, and then give a
specific error message for each. That way if this does ever trigger
in practice will immediately understand which check failed.
Also using '%d' rather than '%i' is more common convention
> + ret = -EINVAL;
> + goto fail;
> + }
> +
> + if (start1 + len1 > luks->header.payload_offset) {
> + error_setg(errp,
> + "Keyslot %i is overlapping with the encrypted payload",
> + i);
> + ret = -EINVAL;
> + goto fail;
> + }
> +
> + for (j = i + 1 ; j < QCRYPTO_BLOCK_LUKS_NUM_KEY_SLOTS ; j++) {
> +
Redundant blank
> + QCryptoBlockLUKSKeySlot *slot2 = &luks->header.key_slots[j];
> + uint start2 = slot2->key_offset;
> + uint len2 = splitkeylen_sectors(luks, slot2->stripes);
> +
> + if (start1 + len1 > start2 && start2 + len2 > start1) {
> + error_setg(errp,
> + "Keyslots %i and %i are overlapping in the header",
%d
> + i, j);
> + ret = -EINVAL;
> + goto fail;
> + }
> + }
> +
> + }
> return 0;
> fail:
> return ret;
> --
> 2.17.2
>
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 :|
next prev parent reply other threads:[~2019-08-22 11:07 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-14 20:22 [Qemu-devel] [PATCH 00/13] RFC: luks/encrypted qcow2 key management Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 01/13] block-crypto: misc refactoring Maxim Levitsky
2019-08-20 16:38 ` Max Reitz
2019-08-22 0:05 ` Maxim Levitsky
2019-08-22 14:34 ` Max Reitz
2019-08-22 15:04 ` Maxim Levitsky
2019-08-21 15:39 ` Daniel P. Berrangé
2019-08-22 0:08 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 02/13] qcrypto-luks: " Maxim Levitsky
2019-08-15 21:40 ` [Qemu-devel] [Qemu-block] " John Snow
2019-08-19 14:21 ` Maxim Levitsky
2019-08-22 10:29 ` Daniel P. Berrangé
2019-08-22 11:04 ` Maxim Levitsky
2019-08-22 11:10 ` Daniel P. Berrangé
2019-08-22 11:13 ` Maxim Levitsky
2019-08-20 17:36 ` [Qemu-devel] " Max Reitz
2019-08-21 23:59 ` Maxim Levitsky
2019-08-22 14:32 ` Max Reitz
2019-08-25 10:46 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 03/13] qcrypto-luks: refactoring: extract load/store/check/parse header functions Maxim Levitsky
2019-08-20 18:01 ` Max Reitz
2019-08-21 22:43 ` Maxim Levitsky
2019-08-22 10:32 ` Daniel P. Berrangé
2019-08-22 10:57 ` Maxim Levitsky
2019-08-22 10:34 ` Daniel P. Berrangé
2019-08-25 14:11 ` Maxim Levitsky
2019-08-22 10:38 ` Daniel P. Berrangé
2019-08-25 14:09 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 04/13] qcrypto-luks: refactoring: simplify the math used for keyslot locations Maxim Levitsky
2019-08-22 10:47 ` Daniel P. Berrangé
2019-08-25 14:30 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 05/13] qcrypto-luks: clear the masterkey and password before freeing them always Maxim Levitsky
2019-08-20 18:12 ` Max Reitz
2019-08-21 22:40 ` Maxim Levitsky
2019-08-22 10:49 ` Daniel P. Berrangé
2019-08-22 10:56 ` Maxim Levitsky
2019-08-25 15:31 ` Maxim Levitsky
2019-08-25 17:15 ` Maxim Levitsky
2019-08-27 8:55 ` Daniel P. Berrangé
2019-08-21 23:01 ` [Qemu-devel] [Qemu-block] " Nir Soffer
2019-08-21 23:11 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 06/13] qcrypto-luks: implement more rigorous header checking Maxim Levitsky
2019-08-22 11:04 ` Daniel P. Berrangé [this message]
2019-08-25 15:40 ` Maxim Levitsky
2019-08-25 16:08 ` Maxim Levitsky
2019-08-26 13:31 ` Eric Blake
2019-08-26 13:39 ` Maxim Levitsky
2019-08-27 8:56 ` Daniel P. Berrangé
2019-08-14 20:22 ` [Qemu-devel] [PATCH 07/13] block: add manage-encryption command (qmp and blockdev) Maxim Levitsky
2019-08-20 18:27 ` Max Reitz
2019-08-21 22:32 ` Maxim Levitsky
2019-08-22 11:14 ` Daniel P. Berrangé
2019-08-21 11:47 ` Markus Armbruster
2019-08-21 22:24 ` Maxim Levitsky
2019-08-22 14:07 ` Markus Armbruster
2019-08-25 16:42 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 08/13] qcrypto: add the plumbing for encryption management Maxim Levitsky
2019-08-22 11:16 ` Daniel P. Berrangé
2019-08-22 11:47 ` Maxim Levitsky
2019-08-22 11:49 ` Daniel P. Berrangé
2019-08-14 20:22 ` [Qemu-devel] [PATCH 09/13] qcrypto-luks: implement the encryption key management Maxim Levitsky
2019-08-22 11:27 ` Daniel P. Berrangé
2019-08-25 17:01 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 10/13] block/crypto: " Maxim Levitsky
2019-08-22 11:29 ` Daniel P. Berrangé
2019-08-22 11:36 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 11/13] block/qcow2: implement the encryption key managment Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 12/13] qemu-img: implement key management Maxim Levitsky
2019-08-20 18:29 ` Max Reitz
2019-08-21 22:33 ` Maxim Levitsky
2019-08-22 11:32 ` Daniel P. Berrangé
2019-08-22 14:42 ` Max Reitz
2019-08-25 17:04 ` Maxim Levitsky
2019-08-14 20:22 ` [Qemu-devel] [PATCH 13/13] iotests : add tests for encryption " Maxim Levitsky
2019-08-14 21:08 ` [Qemu-devel] [PATCH 00/13] RFC: luks/encrypted qcow2 " Eric Blake
2019-08-15 8:49 ` Maxim Levitsky
2019-08-15 9:10 ` Kevin Wolf
2019-08-15 14:18 ` Markus Armbruster
2019-08-15 14:44 ` Maxim Levitsky
2019-08-15 15:00 ` Eric Blake
2019-08-19 12:35 ` Maxim Levitsky
2019-08-21 11:31 ` Markus Armbruster
2019-08-21 13:22 ` Maxim Levitsky
2019-08-20 17:59 ` Max Reitz
2019-08-21 22:00 ` Maxim Levitsky
2019-08-22 11:35 ` Daniel P. Berrangé
2019-08-25 17:10 ` Maxim Levitsky
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=20190822110448.GK3267@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=fam@euphon.net \
--cc=kwolf@redhat.com \
--cc=mlevitsk@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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.