[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/27] hmp: hmp_cont(): don't rely on QERR_DEVICE_EN
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 11/27] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED |
Date: |
Fri, 27 Jul 2012 18:31:52 -0300 |
Today, hmp_cont() checks for QERR_DEVICE_ENCRYPTED in order to know
if qmp_cont() failed due to an encrypted device. If it did,
hmp_cont() accesses QERR_DEVICE_ENCRYPTED's data member 'device' to
precisely know for which device an encryption key must be set.
However, all errors data members are going to be dropped by a later
commit, so hmp_cont() can't do this anymore.
This commit changes hmp_cont() to loop through all block devices
and proactively set an encryption key for any encrypted device
without a valid one.
Signed-off-by: Luiz Capitulino <address@hidden>
---
hmp.c | 43 +++++++++++++++++++++++++------------------
1 file changed, 25 insertions(+), 18 deletions(-)
diff --git a/hmp.c b/hmp.c
index 6b72a64..a906f8a 100644
--- a/hmp.c
+++ b/hmp.c
@@ -610,34 +610,41 @@ void hmp_pmemsave(Monitor *mon, const QDict *qdict)
static void hmp_cont_cb(void *opaque, int err)
{
- Monitor *mon = opaque;
-
if (!err) {
- hmp_cont(mon, NULL);
+ qmp_cont(NULL);
}
}
-void hmp_cont(Monitor *mon, const QDict *qdict)
+static bool block_dev_is_encrypted(const BlockInfo *bdev)
{
- Error *errp = NULL;
-
- qmp_cont(&errp);
- if (error_is_set(&errp)) {
- if (error_is_type(errp, QERR_DEVICE_ENCRYPTED)) {
- const char *device;
+ return (bdev->inserted && bdev->inserted->encrypted);
+}
- /* The device is encrypted. Ask the user for the password
- and retry */
+static bool block_dev_key_is_set(const BlockInfo *bdev)
+{
+ return (bdev->inserted && bdev->inserted->valid_encryption_key);
+}
- device = error_get_field(errp, "device");
- assert(device != NULL);
+void hmp_cont(Monitor *mon, const QDict *qdict)
+{
+ BlockInfoList *bdev_list, *bdev;
+ Error *errp = NULL;
- monitor_read_block_device_key(mon, device, hmp_cont_cb, mon);
- error_free(errp);
- return;
+ bdev_list = qmp_query_block(NULL);
+ for (bdev = bdev_list; bdev; bdev = bdev->next) {
+ if (block_dev_is_encrypted(bdev->value) &&
+ !block_dev_key_is_set(bdev->value)) {
+ monitor_read_block_device_key(mon, bdev->value->device,
+ hmp_cont_cb, NULL);
+ goto out;
}
- hmp_handle_error(mon, &errp);
}
+
+ qmp_cont(&errp);
+ hmp_handle_error(mon, &errp);
+
+out:
+ qapi_free_BlockInfoList(bdev_list);
}
void hmp_system_wakeup(Monitor *mon, const QDict *qdict)
--
1.7.11.2.249.g31c7954.dirty
- [Qemu-devel] [PATCH 01/27] monitor: drop unused monitor debug code, (continued)
- [Qemu-devel] [PATCH 01/27] monitor: drop unused monitor debug code, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 02/27] qerror: QERR_AMBIGUOUS_PATH: drop %(object) from human msg, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 03/27] qerror: QERR_DEVICE_ENCRYPTED: add filename info to human msg, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 04/27] qerror: reduce public exposure, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 05/27] qerror: drop qerror_abort(), Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 06/27] qerror: QError: drop file, linenr, func, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 07/27] qerror: qerror_format(): return an allocated string, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 08/27] qerror: don't delay error message construction, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 09/27] error: don't delay error message construction, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 10/27] qmp: query-block: add 'valid_encryption_key' field, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 11/27] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED,
Luiz Capitulino <=
- [Qemu-devel] [PATCH 12/27] hmp: hmp_change(): don't use error_get_field(), Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 13/27] error: error_is_type(): don't use error_get_field(), Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 15/27] block: block_int: include qerror.h, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 16/27] hmp: hmp.h: include qdict.h, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 17/27] qapi: qapi-types.h: don't include qapi/qapi-types-core.h, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 19/27] qapi: don't convert enum strings to lowercase, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 20/27] qapi-schema: add ErrorClass enum, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 21/27] qerror: qerror_table: don't use C99 struct initializers, Luiz Capitulino, 2012/07/27
- [Qemu-devel] [PATCH 18/27] qapi: generate correct enum names for camel case enums, Luiz Capitulino, 2012/07/27