target: Fail INQUIRY commands with EVPD==0 but PAGE CODE!=0
authorRoland Dreier <[email protected]>
Wed, 18 Jan 2012 02:00:57 +0000 (18:00 -0800)
committerNicholas Bellinger <[email protected]>
Wed, 18 Jan 2012 08:35:59 +0000 (08:35 +0000)
My draft of SPC-4 says:

    If the PAGE CODE field is not set to zero when the EVPD bit is set
    to zero, the command shall be terminated with CHECK CONDITION
    status, with the sense key set to ILLEGAL REQUEST, and the
    additional sense code set to INVALID FIELD IN CDB.

Signed-off-by: Roland Dreier <[email protected]>
Cc: <[email protected]>
Signed-off-by: Nicholas Bellinger <[email protected]>
drivers/target/target_core_cdb.c

index 370ad13930a46c9d60654ea6cac7e57c32032d62..a9bbf5a5cc27f7b5d0e1a6a97f62a716a5d94408 100644 (file)
@@ -698,6 +698,13 @@ int target_emulate_inquiry(struct se_task *task)
        int p, ret;
 
        if (!(cdb[1] & 0x1)) {
+               if (cdb[2]) {
+                       pr_err("INQUIRY with EVPD==0 but PAGE CODE=%02x\n",
+                              cdb[2]);
+                       cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD;
+                       return -EINVAL;
+               }
+
                ret = target_emulate_inquiry_std(cmd);
                goto out;
        }