From 41bfe2049d35261cd25dbcf51e32e67d0a13c4a9 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 11 Dec 2017 16:20:58 +0900 Subject: [PATCH] iscsi: Sequence error of Data-out PDU when ERL=0 SPDK drops the connection when it observes any sequence error of Data-out PDU when ERL = 0. This is too severe and change dropping the connection to Reject response. This issue was detected by libiscsi test suite. Change-Id: Ic8f50ce55c4e73c8517f726e8cf0e4ff8a0953df Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.gerrithub.io/391158 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- lib/iscsi/iscsi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index b90160b06..bc51c4bcd 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -4113,6 +4113,7 @@ static int spdk_iscsi_op_data(struct spdk_iscsi_conn *conn, int lun_i; int F_bit; int rc; + int reject_reason = ISCSI_REASON_INVALID_PDU_FIELD; if (conn->sess->session_type == SESSION_TYPE_DISCOVERY) { SPDK_ERRLOG("ISCSI_OP_SCSI_DATAOUT not allowed in discovery session\n"); @@ -4151,7 +4152,8 @@ static int spdk_iscsi_op_data(struct spdk_iscsi_conn *conn, if (conn->sess->ErrorRecoveryLevel >= 1) { goto send_r2t_recovery_return; } else { - return SPDK_ISCSI_CONNECTION_FATAL; + reject_reason = ISCSI_REASON_PROTOCOL_ERROR; + goto reject_return; } } @@ -4224,7 +4226,7 @@ send_r2t_recovery_return: return rc; reject_return: - rc = spdk_iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_PDU_FIELD); + rc = spdk_iscsi_reject(conn, pdu, reject_reason); if (rc < 0) { SPDK_ERRLOG("iscsi_reject() failed\n"); return SPDK_ISCSI_CONNECTION_FATAL;