conf: Cleanup matchFCHostToSCSIHost

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.
This commit is contained in:
John Ferlan 2017-02-20 13:59:36 -05:00
parent e22de286b1
commit 0a6cb28b9a

View File

@ -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