Commit 673681ca authored by Nicholas Bellinger's avatar Nicholas Bellinger

iscsi-target: Avoid OFMarker + IFMarker negotiation

This patch fixes a v4.2+ regression introduced by commit c04a6091
that removed support for obsolete sync-and-steering markers usage
as originally defined in RFC-3720.

The regression would involve attempting to send OFMarker=No +
IFMarker=No keys during opertional negotiation login phase,
including when initiators did not actually propose these keys.

The result for MSFT iSCSI initiators would be random junk in
TCP stream after the last successful login request was been sent
signaling the move to full feature phase (FFP) operation.

To address this bug, go ahead and avoid negotiating these keys
by default unless the initiator explicitly proposes them, but
still respond to them with 'No' if they are proposed.
Reported-by: default avatarDragan Milivojević <galileo@pkm-inc.com>
Bisected-by: default avatarChristophe Vu-Brugier <cvubrugier@fastmail.fm>
Tested-by: default avatarChristophe Vu-Brugier <cvubrugier@fastmail.fm>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 8fa3a867
...@@ -407,6 +407,7 @@ int iscsi_create_default_params(struct iscsi_param_list **param_list_ptr) ...@@ -407,6 +407,7 @@ int iscsi_create_default_params(struct iscsi_param_list **param_list_ptr)
TYPERANGE_UTF8, USE_INITIAL_ONLY); TYPERANGE_UTF8, USE_INITIAL_ONLY);
if (!param) if (!param)
goto out; goto out;
/* /*
* Extra parameters for ISER from RFC-5046 * Extra parameters for ISER from RFC-5046
*/ */
...@@ -496,9 +497,9 @@ int iscsi_set_keys_to_negotiate( ...@@ -496,9 +497,9 @@ int iscsi_set_keys_to_negotiate(
} else if (!strcmp(param->name, SESSIONTYPE)) { } else if (!strcmp(param->name, SESSIONTYPE)) {
SET_PSTATE_NEGOTIATE(param); SET_PSTATE_NEGOTIATE(param);
} else if (!strcmp(param->name, IFMARKER)) { } else if (!strcmp(param->name, IFMARKER)) {
SET_PSTATE_NEGOTIATE(param); SET_PSTATE_REJECT(param);
} else if (!strcmp(param->name, OFMARKER)) { } else if (!strcmp(param->name, OFMARKER)) {
SET_PSTATE_NEGOTIATE(param); SET_PSTATE_REJECT(param);
} else if (!strcmp(param->name, IFMARKINT)) { } else if (!strcmp(param->name, IFMARKINT)) {
SET_PSTATE_REJECT(param); SET_PSTATE_REJECT(param);
} else if (!strcmp(param->name, OFMARKINT)) { } else if (!strcmp(param->name, OFMARKINT)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment