Commit 1455084e authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

scsi: ignore LUN field in the CDB



The LUN field in the CDB is a historical relic.  Ignore it as reserved,
which is what modern SCSI specifications actually say.

Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent aba1f023
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -518,7 +518,7 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req, uint8_t *outbuf)

    memset(outbuf, 0, buflen);

    if (req->lun || req->cmd.buf[1] >> 5) {
    if (req->lun) {
        outbuf[0] = 0x7f;	/* LUN not supported */
        return buflen;
    }
@@ -1024,9 +1024,9 @@ static int32_t scsi_send_command(SCSIRequest *req, uint8_t *buf)
    }
#endif

    if (req->lun || buf[1] >> 5) {
    if (req->lun) {
        /* Only LUN 0 supported.  */
        DPRINTF("Unimplemented LUN %d\n", req->lun ? req->lun : buf[1] >> 5);
        DPRINTF("Unimplemented LUN %d\n", req->lun);
        if (command != REQUEST_SENSE && command != INQUIRY) {
            scsi_command_complete(r, CHECK_CONDITION,
                                  SENSE_CODE(LUN_NOT_SUPPORTED));
+2 −3
Original line number Diff line number Diff line
@@ -337,9 +337,8 @@ static int32_t scsi_send_command(SCSIRequest *req, uint8_t *cmd)
    SCSIGenericReq *r = DO_UPCAST(SCSIGenericReq, req, req);
    int ret;

    if (cmd[0] != REQUEST_SENSE &&
        (req->lun != s->lun || (cmd[1] >> 5) != s->lun)) {
        DPRINTF("Unimplemented LUN %d\n", req->lun ? req->lun : cmd[1] >> 5);
    if (cmd[0] != REQUEST_SENSE && req->lun != s->lun) {
        DPRINTF("Unimplemented LUN %d\n", req->lun);
        scsi_set_sense(s, SENSE_CODE(LUN_NOT_SUPPORTED));
        r->req.status = CHECK_CONDITION;
        scsi_req_complete(&r->req);