[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 8/9] virtio-scsi: convert virtio_scsi_bad_req() t
From: |
Greg Kurz |
Subject: |
[Qemu-devel] [PATCH v2 8/9] virtio-scsi: convert virtio_scsi_bad_req() to use virtio_error() |
Date: |
Wed, 21 Sep 2016 18:57:52 +0200 |
User-agent: |
StGit/0.17.1-dirty |
All these errors are caused by a buggy guest: let's switch the device to
the broken state and stop processing the request, instead of terminating
QEMU.
Signed-off-by: Greg Kurz <address@hidden>
---
v2: - use VIRTIO_DEVICE(req->dev) instead of non-existing req->vdev in
virtio_scsi_bad_req
- converted a call to virtio_scsi_bad_req() I had overlooked in
virtio_scsi_handle_cmd_req_prepare()
---
hw/scsi/virtio-scsi.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/hw/scsi/virtio-scsi.c b/hw/scsi/virtio-scsi.c
index e596b6474131..1ff23137542c 100644
--- a/hw/scsi/virtio-scsi.c
+++ b/hw/scsi/virtio-scsi.c
@@ -81,10 +81,9 @@ static void virtio_scsi_complete_req(VirtIOSCSIReq *req)
virtio_scsi_free_req(req);
}
-static void virtio_scsi_bad_req(void)
+static void virtio_scsi_bad_req(VirtIOSCSIReq *req)
{
- error_report("wrong size for virtio-scsi headers");
- exit(1);
+ virtio_error(VIRTIO_DEVICE(req->dev), "wrong size for virtio-scsi
headers");
}
static size_t qemu_sgl_concat(VirtIOSCSIReq *req, struct iovec *iov,
@@ -387,7 +386,7 @@ static void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s,
VirtIOSCSIReq *req)
if (iov_to_buf(req->elem.out_sg, req->elem.out_num, 0,
&type, sizeof(type)) < sizeof(type)) {
- virtio_scsi_bad_req();
+ virtio_scsi_bad_req(req);
return;
}
@@ -395,7 +394,8 @@ static void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s,
VirtIOSCSIReq *req)
if (type == VIRTIO_SCSI_T_TMF) {
if (virtio_scsi_parse_req(req, sizeof(VirtIOSCSICtrlTMFReq),
sizeof(VirtIOSCSICtrlTMFResp)) < 0) {
- virtio_scsi_bad_req();
+ virtio_scsi_bad_req(req);
+ return;
} else {
r = virtio_scsi_do_tmf(s, req);
}
@@ -404,7 +404,8 @@ static void virtio_scsi_handle_ctrl_req(VirtIOSCSI *s,
VirtIOSCSIReq *req)
type == VIRTIO_SCSI_T_AN_SUBSCRIBE) {
if (virtio_scsi_parse_req(req, sizeof(VirtIOSCSICtrlANReq),
sizeof(VirtIOSCSICtrlANResp)) < 0) {
- virtio_scsi_bad_req();
+ virtio_scsi_bad_req(req);
+ return;
} else {
req->resp.an.event_actual = 0;
req->resp.an.response = VIRTIO_SCSI_S_OK;
@@ -533,7 +534,7 @@ static bool virtio_scsi_handle_cmd_req_prepare(VirtIOSCSI
*s, VirtIOSCSIReq *req
if (rc == -ENOTSUP) {
virtio_scsi_fail_cmd_req(req);
} else {
- virtio_scsi_bad_req();
+ virtio_scsi_bad_req(req);
}
return false;
}
@@ -708,7 +709,8 @@ void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev,
}
if (virtio_scsi_parse_req(req, 0, sizeof(VirtIOSCSIEvent))) {
- virtio_scsi_bad_req();
+ virtio_scsi_bad_req(req);
+ goto out;
}
evt = &req->resp.event;
- Re: [Qemu-devel] [PATCH v2 3/9] virtio-9p: handle handle_9p_output() error, (continued)
- [Qemu-devel] [PATCH v2 4/9] virtio-blk: handle virtio_blk_handle_request() errors, Greg Kurz, 2016/09/21
- [Qemu-devel] [PATCH v2 5/9] virtio-net: handle virtio_net_handle_ctrl() error, Greg Kurz, 2016/09/21
- [Qemu-devel] [PATCH v2 7/9] virtio-net: handle virtio_net_flush_tx() errors, Greg Kurz, 2016/09/21
- [Qemu-devel] [PATCH v2 8/9] virtio-scsi: convert virtio_scsi_bad_req() to use virtio_error(),
Greg Kurz <=
- [Qemu-devel] [PATCH v2 6/9] virtio-net: handle virtio_net_receive() errors, Greg Kurz, 2016/09/21
- [Qemu-devel] [PATCH v2 9/9] virtio-scsi: handle virtio_scsi_set_config() error, Greg Kurz, 2016/09/21
- Re: [Qemu-devel] [PATCH v2 0/9] virtio: avoid inappropriate QEMU termination, no-reply, 2016/09/21
- Re: [Qemu-devel] [PATCH v2 0/9] virtio: avoid inappropriate QEMU termination, Cornelia Huck, 2016/09/22
- Re: [Qemu-devel] [PATCH v2 0/9] virtio: avoid inappropriate QEMU termination, Stefan Hajnoczi, 2016/09/23