79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
36 lines
1.2 KiB
Diff
36 lines
1.2 KiB
Diff
From 77496578b22e127eb50a5a8c463e92fb3245a7e0 Mon Sep 17 00:00:00 2001
|
|
From: WangJian <wangjian161@huawei.com>
|
|
Date: Wed, 9 Feb 2022 11:42:47 +0800
|
|
Subject: [PATCH] scsi: cdrom: Fix crash after remote cdrom detached
|
|
|
|
There is a small window between the twice blk_is_available in
|
|
scsi_disk_emulate_command which would cause crash due to the later
|
|
assertion if the remote cdrom is detached in this window.
|
|
|
|
So this patch replaces assertions with return to avoid qemu crash.
|
|
|
|
Signed-off-by: wangjian161 <wangjian161@huawei.com>
|
|
---
|
|
hw/scsi/scsi-disk.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
|
|
index d4914178ea..a1053f4036 100644
|
|
--- a/hw/scsi/scsi-disk.c
|
|
+++ b/hw/scsi/scsi-disk.c
|
|
@@ -1930,7 +1930,10 @@ static int32_t scsi_disk_emulate_command(SCSIRequest *req, uint8_t *buf)
|
|
memset(outbuf, 0, r->buflen);
|
|
switch (req->cmd.buf[0]) {
|
|
case TEST_UNIT_READY:
|
|
- assert(blk_is_available(s->qdev.conf.blk));
|
|
+ if (!blk_is_available(s->qdev.conf.blk)) {
|
|
+ scsi_check_condition(r, SENSE_CODE(NO_MEDIUM));
|
|
+ return 0;
|
|
+ }
|
|
break;
|
|
case INQUIRY:
|
|
buflen = scsi_disk_emulate_inquiry(req, outbuf);
|
|
--
|
|
2.27.0
|
|
|