aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/target/target_core_transport.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 37f57357d4a0..6025935036c9 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -1160,15 +1160,28 @@ target_cmd_size_check(struct se_cmd *cmd, unsigned int size)
1160 if (cmd->unknown_data_length) { 1160 if (cmd->unknown_data_length) {
1161 cmd->data_length = size; 1161 cmd->data_length = size;
1162 } else if (size != cmd->data_length) { 1162 } else if (size != cmd->data_length) {
1163 pr_warn("TARGET_CORE[%s]: Expected Transfer Length:" 1163 pr_warn_ratelimited("TARGET_CORE[%s]: Expected Transfer Length:"
1164 " %u does not match SCSI CDB Length: %u for SAM Opcode:" 1164 " %u does not match SCSI CDB Length: %u for SAM Opcode:"
1165 " 0x%02x\n", cmd->se_tfo->get_fabric_name(), 1165 " 0x%02x\n", cmd->se_tfo->get_fabric_name(),
1166 cmd->data_length, size, cmd->t_task_cdb[0]); 1166 cmd->data_length, size, cmd->t_task_cdb[0]);
1167 1167
1168 if (cmd->data_direction == DMA_TO_DEVICE && 1168 if (cmd->data_direction == DMA_TO_DEVICE) {
1169 cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) { 1169 if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) {
1170 pr_err("Rejecting underflow/overflow WRITE data\n"); 1170 pr_err_ratelimited("Rejecting underflow/overflow"
1171 return TCM_INVALID_CDB_FIELD; 1171 " for WRITE data CDB\n");
1172 return TCM_INVALID_CDB_FIELD;
1173 }
1174 /*
1175 * Some fabric drivers like iscsi-target still expect to
1176 * always reject overflow writes. Reject this case until
1177 * full fabric driver level support for overflow writes
1178 * is introduced tree-wide.
1179 */
1180 if (size > cmd->data_length) {
1181 pr_err_ratelimited("Rejecting overflow for"
1182 " WRITE control CDB\n");
1183 return TCM_INVALID_CDB_FIELD;
1184 }
1172 } 1185 }
1173 /* 1186 /*
1174 * Reject READ_* or WRITE_* with overflow/underflow for 1187 * Reject READ_* or WRITE_* with overflow/underflow for