On Mon, 2012-11-05 at 18:02 -0800, Roland Dreier wrote: > From: Roland Dreier <roland@xxxxxxxxxxxxxxx> > > There are some cases, for example when the initiator sends an > out-of-bounds ErrorRecoveryLevel value, where the iSCSI target > terminates the connection without sending back any error. Audit the > login path and add appropriate iscsit_tx_login_rsp() calls to make > sure this doesn't happen. > > Signed-off-by: Roland Dreier <roland@xxxxxxxxxxxxxxx> > --- > drivers/target/iscsi/iscsi_target_login.c | 8 ++++---- > drivers/target/iscsi/iscsi_target_nego.c | 10 ++++++++-- > 2 files changed, 12 insertions(+), 6 deletions(-) > Nice catch here on the handful of missing login exception responses. Applied to for-next, and including a CC' for stable to pickup. Thanks Roland ! > diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c > index 3f34ecf..7bf9ccc 100644 > --- a/drivers/target/iscsi/iscsi_target_login.c > +++ b/drivers/target/iscsi/iscsi_target_login.c > @@ -127,13 +127,13 @@ int iscsi_check_for_session_reinstatement(struct iscsi_conn *conn) > > initiatorname_param = iscsi_find_param_from_key( > INITIATORNAME, conn->param_list); > - if (!initiatorname_param) > - return -1; > - > sessiontype_param = iscsi_find_param_from_key( > SESSIONTYPE, conn->param_list); > - if (!sessiontype_param) > + if (!initiatorname_param || !sessiontype_param) { > + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, > + ISCSI_LOGIN_STATUS_MISSING_FIELDS); > return -1; > + } > > sessiontype = (strncmp(sessiontype_param->value, NORMAL, 6)) ? 1 : 0; > > diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c > index e9053a0..9d902ae 100644 > --- a/drivers/target/iscsi/iscsi_target_nego.c > +++ b/drivers/target/iscsi/iscsi_target_nego.c > @@ -620,8 +620,11 @@ static int iscsi_target_handle_csg_one(struct iscsi_conn *conn, struct iscsi_log > login->req_buf, > payload_length, > conn); > - if (ret < 0) > + if (ret < 0) { > + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, > + ISCSI_LOGIN_STATUS_INIT_ERR); > return -1; > + } > > if (login->first_request) > if (iscsi_target_check_first_request(conn, login) < 0) > @@ -636,8 +639,11 @@ static int iscsi_target_handle_csg_one(struct iscsi_conn *conn, struct iscsi_log > login->rsp_buf, > &login->rsp_length, > conn->param_list); > - if (ret < 0) > + if (ret < 0) { > + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, > + ISCSI_LOGIN_STATUS_INIT_ERR); > return -1; > + } > > if (!login->auth_complete && > ISCSI_TPG_ATTRIB(ISCSI_TPG_C(conn))->authentication) { -- To unsubscribe from this list: send the line "unsubscribe target-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html