iscsi: do not leak initiator_name
The argument of iscsi_create_context is never freed by libiscsi, which in fact calls strdup on it. Avoid a leak. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
0b8db8fe15
commit
b93c94f7ec
|
@ -943,7 +943,7 @@ static int iscsi_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
error_report("Failed to parse URL : %s %s", filename,
|
error_report("Failed to parse URL : %s %s", filename,
|
||||||
iscsi_get_error(iscsi));
|
iscsi_get_error(iscsi));
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(iscsilun, 0, sizeof(IscsiLun));
|
memset(iscsilun, 0, sizeof(IscsiLun));
|
||||||
|
@ -954,13 +954,13 @@ static int iscsi_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
if (iscsi == NULL) {
|
if (iscsi == NULL) {
|
||||||
error_report("iSCSI: Failed to create iSCSI context.");
|
error_report("iSCSI: Failed to create iSCSI context.");
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iscsi_set_targetname(iscsi, iscsi_url->target)) {
|
if (iscsi_set_targetname(iscsi, iscsi_url->target)) {
|
||||||
error_report("iSCSI: Failed to set target name.");
|
error_report("iSCSI: Failed to set target name.");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iscsi_url->user != NULL) {
|
if (iscsi_url->user != NULL) {
|
||||||
|
@ -969,7 +969,7 @@ static int iscsi_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
error_report("Failed to set initiator username and password");
|
error_report("Failed to set initiator username and password");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -977,13 +977,13 @@ static int iscsi_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
if (parse_chap(iscsi, iscsi_url->target) != 0) {
|
if (parse_chap(iscsi, iscsi_url->target) != 0) {
|
||||||
error_report("iSCSI: Failed to set CHAP user/password");
|
error_report("iSCSI: Failed to set CHAP user/password");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iscsi_set_session_type(iscsi, ISCSI_SESSION_NORMAL) != 0) {
|
if (iscsi_set_session_type(iscsi, ISCSI_SESSION_NORMAL) != 0) {
|
||||||
error_report("iSCSI: Failed to set session type to normal.");
|
error_report("iSCSI: Failed to set session type to normal.");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
iscsi_set_header_digest(iscsi, ISCSI_HEADER_DIGEST_NONE_CRC32C);
|
iscsi_set_header_digest(iscsi, ISCSI_HEADER_DIGEST_NONE_CRC32C);
|
||||||
|
@ -1004,7 +1004,7 @@ static int iscsi_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
!= 0) {
|
!= 0) {
|
||||||
error_report("iSCSI: Failed to start async connect.");
|
error_report("iSCSI: Failed to start async connect.");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!task.complete) {
|
while (!task.complete) {
|
||||||
|
@ -1015,11 +1015,7 @@ static int iscsi_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
error_report("iSCSI: Failed to connect to LUN : %s",
|
error_report("iSCSI: Failed to connect to LUN : %s",
|
||||||
iscsi_get_error(iscsi));
|
iscsi_get_error(iscsi));
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto failed;
|
goto out;
|
||||||
}
|
|
||||||
|
|
||||||
if (iscsi_url != NULL) {
|
|
||||||
iscsi_destroy_url(iscsi_url);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Medium changer or tape. We dont have any emulation for this so this must
|
/* Medium changer or tape. We dont have any emulation for this so this must
|
||||||
|
@ -1031,19 +1027,22 @@ static int iscsi_open(BlockDriverState *bs, const char *filename, int flags)
|
||||||
bs->sg = 1;
|
bs->sg = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
ret = 0;
|
||||||
|
|
||||||
failed:
|
out:
|
||||||
if (initiator_name != NULL) {
|
if (initiator_name != NULL) {
|
||||||
g_free(initiator_name);
|
g_free(initiator_name);
|
||||||
}
|
}
|
||||||
if (iscsi_url != NULL) {
|
if (iscsi_url != NULL) {
|
||||||
iscsi_destroy_url(iscsi_url);
|
iscsi_destroy_url(iscsi_url);
|
||||||
}
|
}
|
||||||
if (iscsi != NULL) {
|
|
||||||
iscsi_destroy_context(iscsi);
|
if (ret) {
|
||||||
|
if (iscsi != NULL) {
|
||||||
|
iscsi_destroy_context(iscsi);
|
||||||
|
}
|
||||||
|
memset(iscsilun, 0, sizeof(IscsiLun));
|
||||||
}
|
}
|
||||||
memset(iscsilun, 0, sizeof(IscsiLun));
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue