diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2013-11-06 23:55:39 -0500 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2013-11-07 15:08:56 -0500 |
commit | dbcbc95cd85854588ac80c0a6d98586fa2129418 (patch) | |
tree | 7f8921a0cc0fa357e680ab7d4938bb84afb9d9c1 /drivers/target | |
parent | 95b60f078899a9680688bab909d02169e1fd632e (diff) |
iscsi-target: Do not generate REJECTs for zero-length DataOUT
This patch changes iscsit_check_dataout_hdr() to no longer generate
REJECTs for zero-length DataOUTs, and instead simply ignore these
requests.
This follows RFC-3720, Section 10.7.7. DataSegmentLength
"This is the data payload length of a SCSI Data-In or SCSI Data-Out PDU.
The sending of 0 length data segments should be avoided, but initiators
and targets MUST be able to properly receive 0 length data segments."
Reported-by: Santosh Kulkarni <santosh.kulkarni@calsoftinc.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target')
-rw-r--r-- | drivers/target/iscsi/iscsi_target.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index e183352a0645..ab64cbbb4976 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c | |||
@@ -1249,9 +1249,8 @@ iscsit_check_dataout_hdr(struct iscsi_conn *conn, unsigned char *buf, | |||
1249 | int rc; | 1249 | int rc; |
1250 | 1250 | ||
1251 | if (!payload_length) { | 1251 | if (!payload_length) { |
1252 | pr_err("DataOUT payload is ZERO, protocol error.\n"); | 1252 | pr_warn("DataOUT payload is ZERO, ignoring.\n"); |
1253 | return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR, | 1253 | return 0; |
1254 | buf); | ||
1255 | } | 1254 | } |
1256 | 1255 | ||
1257 | /* iSCSI write */ | 1256 | /* iSCSI write */ |
@@ -1481,7 +1480,7 @@ EXPORT_SYMBOL(iscsit_check_dataout_payload); | |||
1481 | 1480 | ||
1482 | static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf) | 1481 | static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf) |
1483 | { | 1482 | { |
1484 | struct iscsi_cmd *cmd; | 1483 | struct iscsi_cmd *cmd = NULL; |
1485 | struct iscsi_data *hdr = (struct iscsi_data *)buf; | 1484 | struct iscsi_data *hdr = (struct iscsi_data *)buf; |
1486 | int rc; | 1485 | int rc; |
1487 | bool data_crc_failed = false; | 1486 | bool data_crc_failed = false; |