]> git.proxmox.com Git - qemu.git/blobdiff - hw/scsi/scsi-generic.c
scsi-generic: fix sign extension of READ CAPACITY(10) data
[qemu.git] / hw / scsi / scsi-generic.c
index 2a9a561127ed52818f78c97e6ac2f3e6e293c2b9..19bd36cd541b400b549b2ae701dae2abb29e5f7e 100644 (file)
@@ -198,9 +198,10 @@ static void scsi_read_complete(void * opaque, int ret)
         scsi_command_complete(r, 0);
     } else {
         /* Snoop READ CAPACITY output to set the blocksize.  */
-        if (r->req.cmd.buf[0] == READ_CAPACITY_10) {
+        if (r->req.cmd.buf[0] == READ_CAPACITY_10 &&
+            (ldl_be_p(&r->buf[0]) != 0xffffffffU || s->max_lba == 0)) {
             s->blocksize = ldl_be_p(&r->buf[4]);
-            s->max_lba = ldl_be_p(&r->buf[0]);
+            s->max_lba = ldl_be_p(&r->buf[0]) & 0xffffffffULL;
         } else if (r->req.cmd.buf[0] == SERVICE_ACTION_IN_16 &&
                    (r->req.cmd.buf[1] & 31) == SAI_READ_CAPACITY_16) {
             s->blocksize = ldl_be_p(&r->buf[8]);