diff options
author | Roland Dreier <roland@purestorage.com> | 2012-01-17 18:00:57 -0800 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2012-01-18 08:35:59 +0000 |
commit | bf0053550aebe56f3bb5dd793e9de69238b5b945 (patch) | |
tree | eac9ac787478014209756b6505146564d41f40a8 | |
parent | bb1acb2ee038a6c13ee99e0b9fb44dacb4a9de84 (diff) | |
download | linux-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.c | 7 |
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; } |