diff options
Diffstat (limited to 'drivers/target/iscsi/iscsi_target_nego.c')
| -rw-r--r-- | drivers/target/iscsi/iscsi_target_nego.c | 26 | 
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/target/iscsi/iscsi_target_nego.c b/drivers/target/iscsi/iscsi_target_nego.c index 14d1aed5af1..62a095f36bf 100644 --- a/drivers/target/iscsi/iscsi_target_nego.c +++ b/drivers/target/iscsi/iscsi_target_nego.c @@ -88,7 +88,7 @@ int extract_param(  	if (len < 0)  		return -1; -	if (len > max_length) { +	if (len >= max_length) {  		pr_err("Length of input: %d exceeds max_length:"  			" %d\n", len, max_length);  		return -1; @@ -140,7 +140,7 @@ static u32 iscsi_handle_authentication(  			iscsi_nacl = container_of(se_nacl, struct iscsi_node_acl,  						  se_node_acl); -			auth = ISCSI_NODE_AUTH(iscsi_nacl); +			auth = &iscsi_nacl->node_auth;  		}  	} else {  		/* @@ -375,7 +375,7 @@ static int iscsi_target_do_tx_login_io(struct iscsi_conn *conn, struct iscsi_log  	return 0;  } -static void iscsi_target_sk_data_ready(struct sock *sk, int count) +static void iscsi_target_sk_data_ready(struct sock *sk)  {  	struct iscsi_conn *conn = sk->sk_user_data;  	bool rc; @@ -404,7 +404,7 @@ static void iscsi_target_sk_data_ready(struct sock *sk, int count)  	}  	rc = schedule_delayed_work(&conn->login_work, 0); -	if (rc == false) { +	if (!rc) {  		pr_debug("iscsi_target_sk_data_ready, schedule_delayed_work"  			 " got false\n");  	} @@ -513,7 +513,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)  	state = (tpg->tpg_state == TPG_STATE_ACTIVE);  	spin_unlock(&tpg->tpg_state_lock); -	if (state == false) { +	if (!state) {  		pr_debug("iscsi_target_do_login_rx: tpg_state != TPG_STATE_ACTIVE\n");  		iscsi_target_restore_sock_callbacks(conn);  		iscsi_target_login_drop(conn, login); @@ -528,7 +528,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)  		state = iscsi_target_sk_state_check(sk);  		read_unlock_bh(&sk->sk_callback_lock); -		if (state == false) { +		if (!state) {  			pr_debug("iscsi_target_do_login_rx, TCP state CLOSE\n");  			iscsi_target_restore_sock_callbacks(conn);  			iscsi_target_login_drop(conn, login); @@ -773,6 +773,12 @@ static int iscsi_target_handle_csg_zero(  		}  		goto do_auth; +	} else if (!payload_length) { +		pr_err("Initiator sent zero length security payload," +		       " login failed\n"); +		iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_INITIATOR_ERR, +				    ISCSI_LOGIN_STATUS_AUTH_FAILED); +		return -1;  	}  	if (login->first_request) @@ -789,7 +795,7 @@ static int iscsi_target_handle_csg_zero(  		return -1;  	if (!iscsi_check_negotiated_keys(conn->param_list)) { -		if (ISCSI_TPG_ATTRIB(ISCSI_TPG_C(conn))->authentication && +		if (conn->tpg->tpg_attrib.authentication &&  		    !strncmp(param->value, NONE, 4)) {  			pr_err("Initiator sent AuthMethod=None but"  				" Target is enforcing iSCSI Authentication," @@ -799,7 +805,7 @@ static int iscsi_target_handle_csg_zero(  			return -1;  		} -		if (ISCSI_TPG_ATTRIB(ISCSI_TPG_C(conn))->authentication && +		if (conn->tpg->tpg_attrib.authentication &&  		    !login->auth_complete)  			return 0; @@ -862,7 +868,7 @@ static int iscsi_target_handle_csg_one(struct iscsi_conn *conn, struct iscsi_log  	}  	if (!login->auth_complete && -	     ISCSI_TPG_ATTRIB(ISCSI_TPG_C(conn))->authentication) { +	     conn->tpg->tpg_attrib.authentication) {  		pr_err("Initiator is requesting CSG: 1, has not been"  			 " successfully authenticated, and the Target is"  			" enforcing iSCSI Authentication, login failed.\n"); @@ -1192,7 +1198,7 @@ get_target:  	 */  alloc_tags:  	tag_num = max_t(u32, ISCSIT_MIN_TAGS, queue_depth); -	tag_num += ISCSIT_EXTRA_TAGS; +	tag_num = (tag_num * 2) + ISCSIT_EXTRA_TAGS;  	tag_size = sizeof(struct iscsi_cmd) + conn->conn_transport->priv_size;  	ret = transport_alloc_session_tags(sess->se_sess, tag_num, tag_size);  | 
