Signed-off-by: Shahar Havivi <shah...@redhat.com> --- block.c | 7 +++++-- monitor.c | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/block.c b/block.c index 31d1ba4..e891544 100644 --- a/block.c +++ b/block.c @@ -1134,8 +1134,11 @@ int bdrv_set_key(BlockDriverState *bs, const char *key) if (!bs->encrypted) return 0; } - if (!bs->encrypted || !bs->drv || !bs->drv->bdrv_set_key) - return -1; + if (!bs->encrypted) { + return -EINVAL; + } else if (!bs->drv || !bs->drv->bdrv_set_key) { + return -ENOMEDIUM; + } ret = bs->drv->bdrv_set_key(bs, key); if (ret < 0) { bs->valid_key = 0; diff --git a/monitor.c b/monitor.c index 19470d1..30dcbbe 100644 --- a/monitor.c +++ b/monitor.c @@ -1042,6 +1042,7 @@ static int do_block_set_passwd(Monitor *mon, const QDict *qdict, QObject **ret_data) { BlockDriverState *bs; + int err; bs = bdrv_find(qdict_get_str(qdict, "device")); if (!bs) { @@ -1049,7 +1050,11 @@ static int do_block_set_passwd(Monitor *mon, const QDict *qdict, return -1; } - if (bdrv_set_key(bs, qdict_get_str(qdict, "password")) < 0) { + err = bdrv_set_key(bs, qdict_get_str(qdict, "password")); + if (err == -EINVAL) { + qemu_error_new(QERR_DEVICE_NOT_ENCRYPTED, bdrv_get_device_name(bs)); + return -1; + } else if (err < 0) { qemu_error_new(QERR_INVALID_PASSWORD); return -1; } -- 1.6.3.3