From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1N7y75-0005Bo-8c for qemu-devel@nongnu.org; Tue, 10 Nov 2009 16:18:55 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1N7y70-00054o-6K for qemu-devel@nongnu.org; Tue, 10 Nov 2009 16:18:54 -0500 Received: from [199.232.76.173] (port=37166 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N7y6z-00054a-RB for qemu-devel@nongnu.org; Tue, 10 Nov 2009 16:18:49 -0500 Received: from mail-yw0-f176.google.com ([209.85.211.176]:40061) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1N7y6z-000182-HJ for qemu-devel@nongnu.org; Tue, 10 Nov 2009 16:18:49 -0500 Received: by ywh6 with SMTP id 6so404411ywh.4 for ; Tue, 10 Nov 2009 13:18:48 -0800 (PST) MIME-Version: 1.0 From: Artyom Tarasenko Date: Tue, 10 Nov 2009 22:18:28 +0100 Message-ID: Content-Type: multipart/mixed; boundary=001485f6d59a2451ce04780adb5b Subject: [Qemu-devel] [PATCH] scsi-disk: Inquiry with allocation length of CDB < 36 (v2) List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel Cc: Blue Swirl --001485f6d59a2451ce04780adb5b Content-Type: text/plain; charset=ISO-8859-1 According to SCSI-2 specification, http://ldkelley.com/SCSI2/SCSI2/SCSI2/SCSI2-08.html#8.2.5 , "if the allocation length of the command descriptor block (CDB) is too small to transfer all of the parameters, the additional length shall not be adjusted to reflect the truncation." The 36 mandatory bytes of response are written to outbuf, and then only the length requested in CDB is transferred. Signed-off-by: Artyom Tarasenko --- diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 2a9268a..1af983c 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -5,6 +5,12 @@ * Based on code by Fabrice Bellard * * Written by Paul Brook + * Modifications: + * 2009-Oct-26 Artyom Tarasenko : implemented stamdard inquiry for the case + * when the allocation length of CDB is smaller + * than 36. + * 2009-Oct-13 Artyom Tarasenko : implemented the block descriptor in the + * MODE SENSE response. * * This code is licenced under the LGPL. * @@ -576,11 +582,6 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag, "is less than 5\n", len); goto fail; } - - if (len < 36) { - BADF("Error: Inquiry (STANDARD) buffer size %d " - "is less than 36 (TODO: only 5 required)\n", len); - } } if(len > SCSI_MAX_INQUIRY_LEN) @@ -604,7 +605,13 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag, Some later commands are also implemented. */ outbuf[2] = 3; outbuf[3] = 2; /* Format 2 */ - outbuf[4] = len - 5; /* Additional Length = (Len - 1) - 4 */ + if (len > 36) { + outbuf[4] = len - 5; /* Additional Length = (Len - 1) - 4 */ + } else { + /* If the allocation length of CDB is too small, + the additional length is not adjusted */ + outbuf[4] = 36 - 5; + } /* Sync data transfer and TCQ. */ outbuf[7] = 0x10 | (r->bus->tcq ? 0x02 : 0); r->iov.iov_len = len; --001485f6d59a2451ce04780adb5b Content-Type: application/octet-stream; name="0001-scsi-disk-short-inquiry.patch" Content-Disposition: attachment; filename="0001-scsi-disk-short-inquiry.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g1v5xam20 U2lnbmVkLW9mZi1ieTogQXJ0eW9tIFRhcmFzZW5rbyA8YXRhcjRxZW11QGdtYWlsLmNvbT4KLS0t CmRpZmYgLS1naXQgYS9ody9zY3NpLWRpc2suYyBiL2h3L3Njc2ktZGlzay5jCmluZGV4IDJhOTI2 OGEuLjFhZjk4M2MgMTAwNjQ0Ci0tLSBhL2h3L3Njc2ktZGlzay5jCisrKyBiL2h3L3Njc2ktZGlz ay5jCkBAIC01LDYgKzUsMTIgQEAKICAqIEJhc2VkIG9uIGNvZGUgYnkgRmFicmljZSBCZWxsYXJk CiAgKgogICogV3JpdHRlbiBieSBQYXVsIEJyb29rCisgKiBNb2RpZmljYXRpb25zOgorICogIDIw MDktT2N0LTI2IEFydHlvbSBUYXJhc2Vua28gOiBpbXBsZW1lbnRlZCBzdGFtZGFyZCBpbnF1aXJ5 IGZvciB0aGUgY2FzZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRo ZSBhbGxvY2F0aW9uIGxlbmd0aCBvZiBDREIgaXMgc21hbGxlcgorICogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0aGFuIDM2LgorICogIDIwMDktT2N0LTEzIEFydHlvbSBUYXJhc2Vu a28gOiBpbXBsZW1lbnRlZCB0aGUgYmxvY2sgZGVzY3JpcHRvciBpbiB0aGUgCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1PREUgU0VOU0UgcmVzcG9uc2UuCiAgKgogICogVGhp cyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBMR1BMLgogICoKQEAgLTU3NiwxMSArNTgyLDYg QEAgc3RhdGljIGludDMyX3Qgc2NzaV9zZW5kX2NvbW1hbmQoU0NTSURldmljZSAqZCwgdWludDMy X3QgdGFnLAogICAgICAgICAgICAgICAgICAgICAgImlzIGxlc3MgdGhhbiA1XG4iLCBsZW4pOwog ICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg aWYgKGxlbiA8IDM2KSB7Ci0gICAgICAgICAgICAgICAgQkFERigiRXJyb3I6IElucXVpcnkgKFNU QU5EQVJEKSBidWZmZXIgc2l6ZSAlZCAiCi0gICAgICAgICAgICAgICAgICAgICAiaXMgbGVzcyB0 aGFuIDM2IChUT0RPOiBvbmx5IDUgcmVxdWlyZWQpXG4iLCBsZW4pOwotICAgICAgICAgICAgfQog ICAgICAgICB9CiAKICAgICAgICAgaWYobGVuID4gU0NTSV9NQVhfSU5RVUlSWV9MRU4pCkBAIC02 MDQsNyArNjA1LDEzIEBAIHN0YXRpYyBpbnQzMl90IHNjc2lfc2VuZF9jb21tYW5kKFNDU0lEZXZp Y2UgKmQsIHVpbnQzMl90IHRhZywKICAgICAgICAgICAgU29tZSBsYXRlciBjb21tYW5kcyBhcmUg YWxzbyBpbXBsZW1lbnRlZC4gKi8KIAlvdXRidWZbMl0gPSAzOwogCW91dGJ1ZlszXSA9IDI7IC8q IEZvcm1hdCAyICovCi0Jb3V0YnVmWzRdID0gbGVuIC0gNTsgLyogQWRkaXRpb25hbCBMZW5ndGgg PSAoTGVuIC0gMSkgLSA0ICovCisJaWYgKGxlbiA+IDM2KSB7CisgICAgICAgICAgICBvdXRidWZb NF0gPSBsZW4gLSA1OyAvKiBBZGRpdGlvbmFsIExlbmd0aCA9IChMZW4gLSAxKSAtIDQgKi8KKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIElmIHRoZSBhbGxvY2F0aW9uIGxlbmd0aCBv ZiBDREIgaXMgdG9vIHNtYWxsLAorICAgICAgICAgICAgICAgdGhlIGFkZGl0aW9uYWwgbGVuZ3Ro IGlzIG5vdCBhZGp1c3RlZCAqLyAgCisgICAgICAgICAgICBvdXRidWZbNF0gPSAzNiAtIDU7Cisg ICAgICAgIH0KICAgICAgICAgLyogU3luYyBkYXRhIHRyYW5zZmVyIGFuZCBUQ1EuICAqLwogICAg ICAgICBvdXRidWZbN10gPSAweDEwIHwgKHItPmJ1cy0+dGNxID8gMHgwMiA6IDApOwogCXItPmlv di5pb3ZfbGVuID0gbGVuOwo= --001485f6d59a2451ce04780adb5b--