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>
This commit is contained in:
parent
e6eb2724a2
commit
b92432f462
35
scsi-cdrom-Fix-crash-after-remote-cdrom-detached.patch
Normal file
35
scsi-cdrom-Fix-crash-after-remote-cdrom-detached.patch
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
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
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user