aboutsummaryrefslogtreecommitdiff
path: root/drivers/target/iscsi/iscsi_target.c
diff options
context:
space:
mode:
authorAlex Shi <alex.shi@linaro.org>2017-06-30 14:26:00 +0800
committerAlex Shi <alex.shi@linaro.org>2017-06-30 14:26:00 +0800
commit267aa95e09eec438abf8979b58cded5cbc5586cb (patch)
tree7401fc52691565f31c0ad96a94a7a54971cc6e6a /drivers/target/iscsi/iscsi_target.c
parentd87abdcbf8871b5ee58083b3bdf216ba406224b9 (diff)
parent6ee496d7218aeccffe5380cb65e9d50d1a61c323 (diff)
Merge tag 'v4.4.75' into linux-linaro-lsk-v4.4lsk-v4.4-17.06
This is the 4.4.75 stable release
Diffstat (limited to 'drivers/target/iscsi/iscsi_target.c')
-rw-r--r--drivers/target/iscsi/iscsi_target.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 200d3de8bc1e..a180c000e246 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1112,6 +1112,18 @@ iscsit_get_immediate_data(struct iscsi_cmd *cmd, struct iscsi_scsi_req *hdr,
*/
if (dump_payload)
goto after_immediate_data;
+ /*
+ * Check for underflow case where both EDTL and immediate data payload
+ * exceeds what is presented by CDB's TRANSFER LENGTH, and what has
+ * already been set in target_cmd_size_check() as se_cmd->data_length.
+ *
+ * For this special case, fail the command and dump the immediate data
+ * payload.
+ */
+ if (cmd->first_burst_len > cmd->se_cmd.data_length) {
+ cmd->sense_reason = TCM_INVALID_CDB_FIELD;
+ goto after_immediate_data;
+ }
immed_ret = iscsit_handle_immediate_data(cmd, hdr,
cmd->first_burst_len);