summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Dreier <roland@purestorage.com>2012-01-17 18:00:57 -0800
committerNicholas Bellinger <nab@linux-iscsi.org>2012-01-18 08:35:59 +0000
commitbf0053550aebe56f3bb5dd793e9de69238b5b945 (patch)
treeeac9ac787478014209756b6505146564d41f40a8
parentbb1acb2ee038a6c13ee99e0b9fb44dacb4a9de84 (diff)
downloadlinux-3.10-bf0053550aebe56f3bb5dd793e9de69238b5b945.tar.gz
linux-3.10-bf0053550aebe56f3bb5dd793e9de69238b5b945.tar.bz2
linux-3.10-bf0053550aebe56f3bb5dd793e9de69238b5b945.zip
target: Fail INQUIRY commands with EVPD==0 but PAGE CODE!=0
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 <roland@purestorage.com> Cc: <stable@vger.kernel.org> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
-rw-r--r--drivers/target/target_core_cdb.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c
index 370ad13930a..a9bbf5a5cc2 100644
--- a/drivers/target/target_core_cdb.c
+++ b/drivers/target/target_core_cdb.c
@@ -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;
}