From 06cc2d2ece19f87b56509402b6da6cacfdb2c1da Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Thu, 9 Aug 2012 08:27:48 +1000 Subject: [PATCH] CONNECT: connect data is not always malloc()ed so we can demand it is free()able After a sync connection, make sure to clear connect_data since it will otherwise point to a structure on the stack. --- lib/init.c | 1 - lib/socket.c | 6 +----- lib/sync.c | 3 +++ 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/init.c b/lib/init.c index 2bb5b5d..1c11bcf 100644 --- a/lib/init.c +++ b/lib/init.c @@ -244,7 +244,6 @@ iscsi_destroy_context(struct iscsi_context *iscsi) free(discard_const(iscsi->chap_c)); iscsi->chap_c = NULL; - free(iscsi->connect_data); iscsi->connect_data = NULL; free(iscsi); diff --git a/lib/socket.c b/lib/socket.c index 1bcbbd4..8ec437a 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -68,11 +68,6 @@ iscsi_connect_async(struct iscsi_context *iscsi, const char *portal, struct addrinfo *ai = NULL; int socksize; - if (iscsi->connect_data != NULL) { - free(iscsi->connect_data); - } - iscsi->connect_data = private_data; - if (iscsi->fd != -1) { iscsi_set_error(iscsi, "Trying to connect but already connected."); @@ -159,6 +154,7 @@ iscsi_connect_async(struct iscsi_context *iscsi, const char *portal, } iscsi->socket_status_cb = cb; + iscsi->connect_data = private_data; set_nonblocking(iscsi->fd); diff --git a/lib/sync.c b/lib/sync.c index 8363de5..7e369a1 100644 --- a/lib/sync.c +++ b/lib/sync.c @@ -97,6 +97,9 @@ iscsi_connect_sync(struct iscsi_context *iscsi, const char *portal) event_loop(iscsi, &state); + /* clear connect_data so it doesnt point to our stack */ + iscsi->connect_data = NULL; + return state.status; }