On 2015-03-04 at 09:02, Kevin Wolf wrote:
Am 09.02.2015 um 18:11 hat Max Reitz geschrieben:
Only call bdrv_key_required() on the BlockDriverState if the
BlockBackend has an inserted medium.

Signed-off-by: Max Reitz <mre...@redhat.com>
Reviewed-by: Eric Blake <ebl...@redhat.com>
---
  hw/usb/dev-storage.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 4539733..3123baf 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -638,7 +638,7 @@ static void usb_msd_realize_storage(USBDevice *dev, Error 
**errp)
      usb_msd_handle_reset(dev);
      s->scsi_dev = scsi_dev;
- if (bdrv_key_required(blk_bs(blk))) {
+    if (blk_is_inserted(blk) && bdrv_key_required(blk_bs(blk))) {
          if (cur_mon) {
              monitor_read_bdrv_key_start(cur_mon, blk_bs(blk),
                                          usb_msd_password_cb, s);
Why would bdrv_key_required() ever return true when no medium is
inserted? Sounds like a bug to me, like not resetting state correctly on
bdrv_close() of an encrypted image.

The point is that blk_bs(blk) might be NULL.

Max

Reply via email to