mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
monitor: Rework early disk password inquiry (Jan Kiszka)
Reading the passwords for encrypted hard disks during early startup is broken (I guess for quiet a while now): - No monitor terminal is ready for input at this point - Forcing all mux'ed terminals into monitor mode can confuse other users of that channels To overcome these issues and to lay the ground for a clean decoupling of monitor terminals, this patch changes the initial password inquiry as follows: - Prevent autostart if there is some encrypted disk - Once the user tries to resume the VM, prompt for all missing passwords - Only resume if all passwords were accepted Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6707 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
430eb509d2
commit
c0f4ce7751
8 changed files with 85 additions and 65 deletions
14
block.c
14
block.c
|
@ -336,6 +336,7 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
|
|||
bs->read_only = 0;
|
||||
bs->is_temporary = 0;
|
||||
bs->encrypted = 0;
|
||||
bs->valid_key = 0;
|
||||
|
||||
if (flags & BDRV_O_SNAPSHOT) {
|
||||
BlockDriverState *bs1;
|
||||
|
@ -966,6 +967,15 @@ int bdrv_is_encrypted(BlockDriverState *bs)
|
|||
return bs->encrypted;
|
||||
}
|
||||
|
||||
int bdrv_key_required(BlockDriverState *bs)
|
||||
{
|
||||
BlockDriverState *backing_hd = bs->backing_hd;
|
||||
|
||||
if (backing_hd && backing_hd->encrypted && !backing_hd->valid_key)
|
||||
return 1;
|
||||
return (bs->encrypted && !bs->valid_key);
|
||||
}
|
||||
|
||||
int bdrv_set_key(BlockDriverState *bs, const char *key)
|
||||
{
|
||||
int ret;
|
||||
|
@ -978,7 +988,9 @@ int bdrv_set_key(BlockDriverState *bs, const char *key)
|
|||
}
|
||||
if (!bs->encrypted || !bs->drv || !bs->drv->bdrv_set_key)
|
||||
return -1;
|
||||
return bs->drv->bdrv_set_key(bs, key);
|
||||
ret = bs->drv->bdrv_set_key(bs, key);
|
||||
bs->valid_key = (ret == 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue