diff --git a/monitor.c b/monitor.c index ba76f3416d..27c696b2d4 100644 --- a/monitor.c +++ b/monitor.c @@ -772,6 +772,22 @@ static void do_eject(Monitor *mon, const QDict *qdict, QObject **ret_data) eject_device(mon, bs, force); } +static void do_block_set_passwd(Monitor *mon, const QDict *qdict, + QObject **ret_data) +{ + BlockDriverState *bs; + + bs = bdrv_find(qdict_get_str(qdict, "device")); + if (!bs) { + qemu_error_new(QERR_DEVICE_NOT_FOUND, qdict_get_str(qdict, "device")); + return; + } + + if (bdrv_set_key(bs, qdict_get_str(qdict, "password")) < 0) { + qemu_error_new(QERR_INVALID_PASSWORD); + } +} + static void do_change_block(Monitor *mon, const char *device, const char *filename, const char *fmt) { diff --git a/qemu-monitor.hx b/qemu-monitor.hx index 62e395bffd..c2670ee1d9 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -1045,6 +1045,20 @@ STEXI Close the file descriptor previously assigned to @var{fdname} using the @code{getfd} command. This is only needed if the file descriptor was never used by another monitor command. +ETEXI + + { + .name = "block_passwd", + .args_type = "device:B,password:s", + .params = "block_passwd device password", + .help = "set the password of encrypted block devices", + .user_print = monitor_user_noop, + .mhandler.cmd_new = do_block_set_passwd, + }, + +STEXI +@item block_passwd @var{device} @var{password} +Set the encrypted device @var{device} password to @var{password} ETEXI STEXI