From 628dc9c16279b23b5d594639e98851912546cab2 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 16 Mar 2020 08:46:09 +0900 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 Change-Id: Idffd90cd6ee8e6cb4298fe3f1363d8d5c5a3c49d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1275 Tested-by: SPDK CI Jenkins Reviewed-by: Ziye Yang Reviewed-by: Changpeng Liu Reviewed-by: wanghailiang 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;