]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuDomainGetGuestInfo: Exit early if getting info fails
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 1 Dec 2020 10:47:13 +0000 (11:47 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 2 Dec 2020 14:33:53 +0000 (15:33 +0100)
If there is an error getting info from guest agent, then the
control on qemuDomainGetGuestInfo() jumps onto 'exitagent' label
and subsequently continues on 'endagentjob'. Both labels are hit
also in success case too. The control then continues by
attempting to match fetched info (e.g. disk addresses) with
domain def. But this is needless - the API will return error
regardless.

To return early from the function move both 'exitagent' and
'endagentjob' labels at the end of the function and jump straight
onto 'cleanup' afterwards. This allows us to set 'ret = 0' later
- only when we know we succeeded.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_driver.c

index 8eaa3ce68f9157bafa9a6b54fd07d0d808509af4..bca1c84630ea61236bbfa035e73ea128b5e0b4d8 100644 (file)
@@ -20116,12 +20116,7 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
         }
     }
 
-    ret = 0;
-
- exitagent:
     qemuDomainObjExitAgent(vm, agent);
-
- endagentjob:
     qemuDomainObjEndAgentJob(vm);
 
     if (nfs > 0 || ndisks > 0) {
@@ -20143,6 +20138,8 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
         qemuDomainObjEndJob(driver, vm);
     }
 
+    ret = 0;
+
  cleanup:
     for (i = 0; i < nfs; i++)
         qemuAgentFSInfoFree(agentfsinfo[i]);
@@ -20153,6 +20150,13 @@ qemuDomainGetGuestInfo(virDomainPtr dom,
 
     virDomainObjEndAPI(&vm);
     return ret;
+
+ exitagent:
+    qemuDomainObjExitAgent(vm, agent);
+
+ endagentjob:
+    qemuDomainObjEndAgentJob(vm);
+    goto cleanup;
 }