Blob Blame History Raw
From fd5471960f8f0556efae2c9539867fb3c1ca0882 Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <pbonzini@redhat.com>
Date: Wed, 2 Apr 2014 12:44:04 +0200
Subject: [PATCH] libiscsi: fix dangling pointer for outqueue_current

The outqueue_current PDU might also be in waitpdu if it does not have
ISCSI_PDU_DELETE_WHEN_SENT.  Because outqueue_current is freed after
the waitpdu list, we need to ensure it is kept up to date when a PDU
is freed.  This can happen in many places (reconnect, defer_reconnect,
cancel) so just do it in iscsi_free_pdu.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 lib/pdu.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lib/pdu.c b/lib/pdu.c
index 89b15c2..4db5f27 100644
--- a/lib/pdu.c
+++ b/lib/pdu.c
@@ -147,6 +147,10 @@ iscsi_free_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu)
 	}
 	pdu->indata.data = NULL;
 
+	if (iscsi->outqueue_current == pdu) {
+		iscsi->outqueue_current = NULL;
+	}
+
 	iscsi_sfree(iscsi, pdu);
 }