VirtualBox

Ignore:
Timestamp:
Jun 5, 2013 7:58:39 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
86226
Message:

LunSbc: Accept dummy logical block length sets.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/VSCSI/VSCSILunSbc.cpp

    r44528 r46400  
    278278            RTSgBufCopyFromBuf(&pVScsiReq->SgBuf, aReply, sizeof(aReply));
    279279            rcReq = vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
     280            break;
     281        }
     282        case SCSI_MODE_SELECT_6:
     283        {
     284            uint8_t abParms[12];
     285            size_t  cbCopied;
     286            size_t  cbList = pVScsiReq->pbCDB[4];
     287
     288            /* Copy the parameters. */
     289            cbCopied = RTSgBufCopyToBuf(&pVScsiReq->SgBuf, &abParms[0], sizeof(abParms));
     290
     291            /* Handle short LOGICAL BLOCK LENGTH parameter. */
     292            if (   !(pVScsiReq->pbCDB[1] & 0x01)
     293                && cbCopied == sizeof(abParms)
     294                && cbList >= 12
     295                && abParms[3] == 8)
     296            {
     297                uint32_t    cbBlock;
     298
     299                cbBlock = vscsiBE2HU24(&abParms[4 + 5]);
     300                Log2(("SBC: set LOGICAL BLOCK LENGTH to %u\n", cbBlock));
     301                if (cbBlock == 512) /* Fixed block size. */
     302                {
     303                    rcReq = vscsiLunReqSenseOkSet(pVScsiLun, pVScsiReq);
     304                    break;
     305                }
     306            }
     307            /* Fail any other requests. */
     308            rcReq = vscsiLunReqSenseErrorSet(pVScsiLun, pVScsiReq, SCSI_SENSE_ILLEGAL_REQUEST, SCSI_ASC_INV_FIELD_IN_CMD_PACKET, 0x00);
    280309            break;
    281310        }
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette