提交 1e6bc3c5 编写于 作者: J Joao Martins 提交者: John Ferlan

libxl: fix coverity issues introduced by 6a95edf9

As discussed here [0][1] Coverity reported two issues:

- On libxlDomainMigrationPrepareTunnel3 @@mig will be leaked on failures
after sucessfull call libxlDomainMigrationPrepareAny hence we free it.

Setting mig = NULL after @mig is assigned plus adding libxlMigrationCookieFree
on error paths addresses the issue. In case virThreadCreate fails,
unref of args frees the cookie on dispose function (libxlMigrationDstArgsDispose)

- On libxlMigrationStartTunnel @tc would be leaked.

Fixed by correctly saving the newly allocated @tc onto @tnl such that
libxlMigrationStopTunnel would free it up.

[0] https://www.redhat.com/archives/libvir-list/2017-February/msg00791.html
[1] https://www.redhat.com/archives/libvir-list/2017-February/msg00833.htmlSigned-off-by: NJoao Martins <joao.m.martins@oracle.com>
上级 1d9ab0f0
...@@ -617,6 +617,8 @@ libxlDomainMigrationPrepareTunnel3(virConnectPtr dconn, ...@@ -617,6 +617,8 @@ libxlDomainMigrationPrepareTunnel3(virConnectPtr dconn,
/* Receive from pipeOut */ /* Receive from pipeOut */
args->recvfd = dataFD[0]; args->recvfd = dataFD[0];
args->nsocks = 0; args->nsocks = 0;
mig = NULL;
if (virThreadCreate(&thread, false, libxlDoMigrateReceive, args) < 0) { if (virThreadCreate(&thread, false, libxlDoMigrateReceive, args) < 0) {
virReportError(VIR_ERR_OPERATION_FAILED, "%s", virReportError(VIR_ERR_OPERATION_FAILED, "%s",
_("Failed to create thread for receiving migration data")); _("Failed to create thread for receiving migration data"));
...@@ -627,6 +629,7 @@ libxlDomainMigrationPrepareTunnel3(virConnectPtr dconn, ...@@ -627,6 +629,7 @@ libxlDomainMigrationPrepareTunnel3(virConnectPtr dconn,
goto done; goto done;
error: error:
libxlMigrationCookieFree(mig);
VIR_FORCE_CLOSE(dataFD[1]); VIR_FORCE_CLOSE(dataFD[1]);
VIR_FORCE_CLOSE(dataFD[0]); VIR_FORCE_CLOSE(dataFD[0]);
virObjectUnref(args); virObjectUnref(args);
...@@ -907,13 +910,15 @@ libxlMigrationStartTunnel(libxlDriverPrivatePtr driver, ...@@ -907,13 +910,15 @@ libxlMigrationStartTunnel(libxlDriverPrivatePtr driver,
virDomainObjPtr vm, virDomainObjPtr vm,
unsigned long flags, unsigned long flags,
virStreamPtr st, virStreamPtr st,
struct libxlTunnelControl *tc) struct libxlTunnelControl **tnl)
{ {
struct libxlTunnelControl *tc = NULL;
libxlTunnelMigrationThread *arg = NULL; libxlTunnelMigrationThread *arg = NULL;
int ret = -1; int ret = -1;
if (VIR_ALLOC(tc) < 0) if (VIR_ALLOC(tc) < 0)
goto out; goto out;
*tnl = tc;
tc->dataFD[0] = -1; tc->dataFD[0] = -1;
tc->dataFD[1] = -1; tc->dataFD[1] = -1;
...@@ -1045,7 +1050,7 @@ libxlDoMigrateP2P(libxlDriverPrivatePtr driver, ...@@ -1045,7 +1050,7 @@ libxlDoMigrateP2P(libxlDriverPrivatePtr driver,
VIR_DEBUG("Perform3 uri=%s", NULLSTR(uri_out)); VIR_DEBUG("Perform3 uri=%s", NULLSTR(uri_out));
if (flags & VIR_MIGRATE_TUNNELLED) if (flags & VIR_MIGRATE_TUNNELLED)
ret = libxlMigrationStartTunnel(driver, vm, flags, st, tc); ret = libxlMigrationStartTunnel(driver, vm, flags, st, &tc);
else else
ret = libxlDomainMigrationPerform(driver, vm, NULL, NULL, ret = libxlDomainMigrationPerform(driver, vm, NULL, NULL,
uri_out, NULL, flags); uri_out, NULL, flags);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册