[Stgt-devel] [Patch] Segmentation fault in conn_close

Tomas Henzl thenzl
Fri Jul 25 14:56:22 CEST 2008


I noticed a segfault which is probably caused by the patch 
"iscsi: needs to call iscsi_free_cmd_task for commands in tx_clist"

it looks like that for some reason iscsi_free_cmd_task(task); gets called  with
appropriate scmd zeroed out (not initialized ?) and then it causes a segfault
in list_del.

I don't know how could it happen that this structure (scmd) is empty. The patch 
below solves my problem - it restores the old behaviour if the scmd is empty
as it was before the patch mentioned above.


Signed-off-by: Tomas Henzl <thenzl at redhat.com>
diff -Naurp tgt2/usr/iscsi/conn.c tgt/usr/iscsi/conn.c
--- tgt2/usr/iscsi/conn.c	2008-06-13 14:14:37.000000000 +0200
+++ tgt/usr/iscsi/conn.c	2008-07-24 14:04:30.000000000 +0200
@@ -109,7 +109,12 @@ void conn_close(struct iscsi_connection 
 	list_for_each_entry_safe(task, tmp, &conn->tx_clist, c_list) {
 		dprintf("Forcing release of tx task %" PRIx64 "\n",
-		iscsi_free_cmd_task(task);
+		if (task->scmd.c_target)
+			iscsi_free_cmd_task(task);
+		else {
+			list_del(&task->c_list);
+			iscsi_free_task(task);
+		}	
 	if (conn->rx_task) {

More information about the stgt mailing list