Hi Nab,
On Friday 30 May 2014 01:27 AM, Nicholas A. Bellinger wrote:
On Thu, 2014-05-29 at 13:25 +0530, Santosh Kulkarni wrote:
Hi Nab,
Am trying to login through multiple connections in a Session. However
after the login succeeds on the leading connection the subsequent
connections in the session fail to succeed in the initial login requests
and hence login fails on subsequent connections.
I looked into the code and i see that a kmalloc for a "tmpbuf" fails
for the initial login request processing.
Here's the dmesg.
[872129.660613] Unable to allocate memory for tmpbuf.
[872129.660619] iSCSI Login negotiation failed.
PFA the pcap for the entire login process.
I see the following issue with both my code for a Linux initiator and as
well a Windows Standard Initiator.
Target Kernel:
# uname -r
3.14.0-rc6+
cat /sys/kernel/config/target/version
Target Engine Core ConfigFS Infrastructure v4.1.0 on Linux/x86_64 on
3.14.0-rc6+
Am i looking at a possible issue.Please comment.
Indeed. Here is the patch that I'm applying to address this bug:
commit 39f06a511345d60163594d08ff3735990cabbd1d
Author: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
Date: Thu May 29 12:36:43 2014 -0700
iscsi-target: Fix incorrect buffer usage in non-leading connection login
This patch fixes a bug in non-leading connection login processing where
iscsi_login_non_zero_tsih_s2() was incorrectly using the login request
header as a temporary buffer for setting TargetPortalGroupTag.
This bug was manifesting itself as login failures with non-leading with
multiple connection per session (MC/S) operation.
Reported-by: Santosh Kulkarni <santosh.kulkarni@xxxxxxxxxxxxxx>
Signed-off-by: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_lo
index ca31fa1..bb76197 100644
--- a/drivers/target/iscsi/iscsi_target_login.c
+++ b/drivers/target/iscsi/iscsi_target_login.c
@@ -550,13 +550,14 @@ static int iscsi_login_non_zero_tsih_s1(
*/
static int iscsi_login_non_zero_tsih_s2(
struct iscsi_conn *conn,
- unsigned char *buf)
+ unsigned char *p)
{
struct iscsi_portal_group *tpg = conn->tpg;
struct iscsi_session *sess = NULL, *sess_p = NULL;
struct se_portal_group *se_tpg = &tpg->tpg_se_tpg;
struct se_session *se_sess, *se_sess_tmp;
- struct iscsi_login_req *pdu = (struct iscsi_login_req *)buf;
+ struct iscsi_login_req *pdu = (struct iscsi_login_req *)p;
+ unsigned char buf[32];
bool iser = false;
spin_lock_bh(&se_tpg->session_lock);
Interestingly enough, this bug in iscsi_login_non_zero_tsih_s1() has
been around for a long time, but only appears to be getting triggered
recently with the v3.10 changes to support iser-target.
Regardless, thanks for reporting.
--nab
Thanks, Works fine now.
Regards
Santosh
--
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