From 136c0771ad315c1dd38eb9ec690c1a2434346700 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 18 Mar 2020 05:18:24 -0400 Subject: [PATCH] lib/iscsi: Return when connection state is already exited at login completion iSCSI target got segmentation fault if connection is being exited between spdk_iscsi_conn_write_pdu() and its callback iscsi_conn_login_pdu_success_complete() are executed. This was caused by recent asynchronous socket write feature. Fixes issue #1278. Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1275 (master) (cherry picked from commit 628dc9c16279b23b5d594639e98851912546cab2) Change-Id: Idffd90cd6ee8e6cb4298fe3f1363d8d5c5a3c49d Signed-off-by: Tomasz Zawadzki Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1355 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/iscsi/iscsi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index d5a67f631..d44e36245 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -1138,6 +1138,11 @@ iscsi_conn_login_pdu_success_complete(void *arg) { struct spdk_iscsi_conn *conn = arg; + if (conn->state >= ISCSI_CONN_STATE_EXITING) { + /* Connection is being exited before this callback is executed. */ + SPDK_DEBUGLOG(SPDK_LOG_ISCSI, "Connection is already exited.\n"); + return; + } if (conn->full_feature) { if (iscsi_conn_params_update(conn) != 0) { return;