[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 08/11] usb/msd: Add some additional assertions
From: |
Nicholas Piggin |
Subject: |
[PATCH 08/11] usb/msd: Add some additional assertions |
Date: |
Thu, 12 Dec 2024 19:13:19 +1000 |
Add more assertions to help verify internal logic.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
hw/usb/dev-storage.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
index 4e23537cd75..c04cee0041b 100644
--- a/hw/usb/dev-storage.c
+++ b/hw/usb/dev-storage.c
@@ -264,13 +264,24 @@ void usb_msd_transfer_data(SCSIRequest *req, uint32_t len)
MSDState *s = DO_UPCAST(MSDState, dev.qdev, req->bus->qbus.parent);
USBPacket *p = s->data_packet;
- if ((s->mode == USB_MSDM_DATAOUT) != (req->cmd.mode == SCSI_XFER_TO_DEV)) {
- usb_msd_fatal_error(s);
- return;
+ if (s->mode == USB_MSDM_DATAIN) {
+ if (req->cmd.mode == SCSI_XFER_TO_DEV) {
+ usb_msd_fatal_error(s);
+ return;
+ }
+ } else if (s->mode == USB_MSDM_DATAOUT) {
+ if (req->cmd.mode != SCSI_XFER_TO_DEV) {
+ usb_msd_fatal_error(s);
+ return;
+ }
+ } else {
+ g_assert_not_reached();
}
+ assert(s->scsi_len == 0);
s->scsi_len = len;
s->scsi_off = 0;
+
if (p) {
usb_msd_copy_data(s, p);
p = s->data_packet;
@@ -288,6 +299,10 @@ void usb_msd_command_complete(SCSIRequest *req, size_t
resid)
trace_usb_msd_cmd_complete(req->status, req->tag);
+ g_assert(s->req);
+ /* The CBW is what starts the SCSI request */
+ g_assert(s->mode != USB_MSDM_CBW);
+
s->csw.sig = cpu_to_le32(0x53425355);
s->csw.tag = cpu_to_le32(req->tag);
s->csw.residue = cpu_to_le32(s->data_len);
@@ -486,7 +501,7 @@ static void usb_msd_handle_data_out(USBDevice *dev,
USBPacket *p)
trace_usb_msd_cmd_submit(cbw.lun, tag, cbw.flags,
cbw.cmd_len, s->data_len);
assert(le32_to_cpu(s->csw.residue) == 0);
- s->scsi_len = 0;
+ assert(s->scsi_len == 0);
s->req = scsi_req_new(scsi_dev, tag, cbw.lun,
cbw.cmd, cbw.cmd_len, NULL);
if (s->commandlog) {
--
2.45.2
- [PATCH 00/11] usb/msd: Permit relaxed ordering of IN packets, Nicholas Piggin, 2024/12/12
- [PATCH 01/11] usb/msd: Add status to usb_msd_packet_complete() function, Nicholas Piggin, 2024/12/12
- [PATCH 03/11] usb/msd: Ensure packet structure layout is correct, Nicholas Piggin, 2024/12/12
- [PATCH 02/11] usb/msd: Split in and out packet handling, Nicholas Piggin, 2024/12/12
- [PATCH 04/11] usb/msd: Improved handling of mass storage reset, Nicholas Piggin, 2024/12/12
- [PATCH 05/11] usb/msd: Improve packet validation error logging, Nicholas Piggin, 2024/12/12
- [PATCH 06/11] usb/msd: Allow CBW packet size greater than 31, Nicholas Piggin, 2024/12/12
- [PATCH 07/11] usb/msd: Split async packet tracking into data and csw, Nicholas Piggin, 2024/12/12
- [PATCH 08/11] usb/msd: Add some additional assertions,
Nicholas Piggin <=
- [PATCH 09/11] usb/msd: Rename mode to cbw_state, and tweak names, Nicholas Piggin, 2024/12/12
- [PATCH 10/11] usb/msd: Permit a DATA-IN or CSW packet before CBW packet, Nicholas Piggin, 2024/12/12
- [PATCH 11/11] usb/msd: Add more tracing, Nicholas Piggin, 2024/12/12