Rather than the inlined VIR_FREE's, use a cleanup: label... Fixes an
issue introduced by 03346def where @name was free'd before usage in
a virAsprintf to format scsi_host_name.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/storage_conf.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 0e9a51f..a52eeba 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -2341,6 +2341,7 @@ matchFCHostToSCSIHost(virConnectPtr conn,
virStoragePoolSourceAdapter fc_adapter,
unsigned int scsi_hostnum)
{
+ bool ret = false;
char *name = NULL;
char *scsi_host_name = NULL;
char *parent_name = NULL;
@@ -2362,10 +2363,9 @@ matchFCHostToSCSIHost(virConnectPtr conn,
* matches our scsi_hostnum
*/
if (virStorageIsSameHostnum(name, scsi_hostnum)) {
- VIR_FREE(name);
- return true;
+ ret = true;
+ goto cleanup;
}
- VIR_FREE(name);
/* We weren't provided a parent, so we have to query the node
* device driver in order to ascertain the parent of the vHBA.
@@ -2373,23 +2373,18 @@ matchFCHostToSCSIHost(virConnectPtr conn,
* have a match.
*/
if (conn && !fc_adapter.data.fchost.parent) {
- if (virAsprintf(&scsi_host_name, "scsi_%s", name) < 0) {
- VIR_FREE(name);
- return false;
- }
+ if (virAsprintf(&scsi_host_name, "scsi_%s", name) < 0)
+ goto cleanup;
if ((parent_name = virNodeDeviceGetParentName(conn,
scsi_host_name))) {
- VIR_FREE(scsi_host_name);
if (virStorageIsSameHostnum(parent_name, scsi_hostnum)) {
- VIR_FREE(parent_name);
- return true;
+ ret = true;
+ goto cleanup;
}
- VIR_FREE(parent_name);
} else {
/* Throw away the error and fall through */
virResetLastError();
VIR_DEBUG("Could not determine parent vHBA");
- VIR_FREE(scsi_host_name);
}
}
}
@@ -2401,7 +2396,12 @@ matchFCHostToSCSIHost(virConnectPtr conn,
* conflict with an existing scsi_host definition, but there's no
* way to know that now.
*/
- return false;
+
+ cleanup:
+ VIR_FREE(name);
+ VIR_FREE(parent_name);
+ VIR_FREE(scsi_host_name);
+ return ret;
}
static bool
--
2.9.3