Re: [PATCH 3/3] iscsi-target: Always send a response before terminating iSCSI connection

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux