qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] The unholy encrypted image key mess


From: Paolo Bonzini
Subject: Re: [Qemu-devel] The unholy encrypted image key mess
Date: Wed, 05 Mar 2014 11:40:58 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0

Il 05/03/2014 11:36, Markus Armbruster ha scritto:
Andreas Färber <address@hidden> writes:

Am 05.03.2014 09:43, schrieb Markus Armbruster:
Kevin Wolf <address@hidden> writes:

'change' is a bit trickier because it involves several low-level actions
at once, and device_add is not one of them.

The problem is that it can run while a device model is attached.

What exactly is the problem here? 'change' is for floppy and CD, right?
The device stays realized/connected and guest-visible during that time,
and the guest should be able to live with no media while the new drive
is not yet decrypted. Are we just lacking a QMP command to enter the
password and complete the change while the guest is executing?

Here's how change works (both HMP and QMP):

1. bdrv_close(); now we have no medium.

2. If a device model is attached, tell it the medium has been ejected.
   A device model supporting notification (anything but floppy, I guess)
   in turn notifies the guest.

3. bdrv_open(); now we again have a medium, we're in state NOKEY if the
   image is unencrypted, and in state NEEDKEY if it's encrypted.

4. Only in state NOKEY: if a device model is attached, tell it a medium
   has been loaded.  A device model supporting notification in turn
   notifies the guest.

5. Only in state NEEDKEY:

   If QMP, fail the command with error DeviceEncrypted.

   If HMP, prompt user for password.

In QMP, the client needs to follow up with a block_passwd command.  In
HMP, the user neeeds to enter a password.  In both cases, time passes,
guest can run, and even other monitor commands can be executed, possibly
in other monitors.  When the password arrives:

7. Set the key, state is now GOTKEY.

8. If a device model is attached, tell it a medium has been loaded.  A
   device model supporting notification in turn notifies the guest.

Shit happens for encrypted images if anything reads or writes between
3. and 8.

You could use bdrv_new before step 3, to open the new medium on a new temporary BDS. Then before step 8 you use bdrv_swap and delete the temporary BDS.

Paolo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]