aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland Dreier <roland@purestorage.com>2012-01-17 18:00:57 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-13 11:17:02 -0800
commit95db7f1f8dee58ba87842ecd5b93e7c2884e0637 (patch)
tree0c3317b297a55a67e0c08f046a9310390333416d
parent0e14d6b67d73aba29df97b9619e97e249a882cbe (diff)
target: Fail INQUIRY commands with EVPD==0 but PAGE CODE!=0
commit bf0053550aebe56f3bb5dd793e9de69238b5b945 upstream. 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> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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 24991f35715..251e48f2f5e 100644
--- a/drivers/target/target_core_cdb.c
+++ b/drivers/target/target_core_cdb.c
@@ -701,6 +701,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;
}