mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
esx: Fix double-free and freeing static strings in esxDomainSetAutostart
Since commit ae83e02f3dd7fe99fed5d8159a35b666fafeafd5#l3393 the newPowerInfo pointer itself is used to track the ownership of the AutoStartPowerInfo object to make Coverity understand the code better. This broke the code that unset some members of the AutoStartPowerInfo object that should not be freed the normal way. Instead, transfer ownership of the AutoStartPowerInfo object to the HostAutoStartManagerConfig object before filling in the values that need special handling. This allows to free the AutoStartPowerInfo directly without having to deal with the special values, or to let the old (now restored) logic handle the special values again. Signed-off-by: Matthias Bolte <matthias.bolte@googlemail.com> Tested-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com> Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
3e8703368b
commit
3ad77f8532
@ -3386,7 +3386,10 @@ esxDomainSetAutostart(virDomainPtr domain, int autostart)
|
|||||||
if (esxVI_AutoStartPowerInfo_Alloc(&newPowerInfo) < 0 ||
|
if (esxVI_AutoStartPowerInfo_Alloc(&newPowerInfo) < 0 ||
|
||||||
esxVI_Int_Alloc(&newPowerInfo->startOrder) < 0 ||
|
esxVI_Int_Alloc(&newPowerInfo->startOrder) < 0 ||
|
||||||
esxVI_Int_Alloc(&newPowerInfo->startDelay) < 0 ||
|
esxVI_Int_Alloc(&newPowerInfo->startDelay) < 0 ||
|
||||||
esxVI_Int_Alloc(&newPowerInfo->stopDelay) < 0) {
|
esxVI_Int_Alloc(&newPowerInfo->stopDelay) < 0 ||
|
||||||
|
esxVI_AutoStartPowerInfo_AppendToList(&spec->powerInfo,
|
||||||
|
newPowerInfo) < 0) {
|
||||||
|
esxVI_AutoStartPowerInfo_Free(&newPowerInfo);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3398,13 +3401,6 @@ esxDomainSetAutostart(virDomainPtr domain, int autostart)
|
|||||||
newPowerInfo->stopDelay->value = -1; /* use system default */
|
newPowerInfo->stopDelay->value = -1; /* use system default */
|
||||||
newPowerInfo->stopAction = (char *)"none";
|
newPowerInfo->stopAction = (char *)"none";
|
||||||
|
|
||||||
if (esxVI_AutoStartPowerInfo_AppendToList(&spec->powerInfo,
|
|
||||||
newPowerInfo) < 0) {
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
newPowerInfo = NULL;
|
|
||||||
|
|
||||||
if (esxVI_ReconfigureAutostart
|
if (esxVI_ReconfigureAutostart
|
||||||
(priv->primary,
|
(priv->primary,
|
||||||
priv->primary->hostSystem->configManager->autoStartManager,
|
priv->primary->hostSystem->configManager->autoStartManager,
|
||||||
@ -3426,8 +3422,6 @@ esxDomainSetAutostart(virDomainPtr domain, int autostart)
|
|||||||
esxVI_AutoStartDefaults_Free(&defaults);
|
esxVI_AutoStartDefaults_Free(&defaults);
|
||||||
esxVI_AutoStartPowerInfo_Free(&powerInfoList);
|
esxVI_AutoStartPowerInfo_Free(&powerInfoList);
|
||||||
|
|
||||||
esxVI_AutoStartPowerInfo_Free(&newPowerInfo);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user