]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_fd: Add return value handling for qemuFDPassTransfer* APIs
authorPeter Krempa <pkrempa@redhat.com>
Wed, 4 May 2022 10:55:36 +0000 (12:55 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 16 May 2022 07:15:45 +0000 (09:15 +0200)
Add possibility to delay checks to the point when the FDs are to be
passed to qemu.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_fd.c
src/qemu/qemu_fd.h
tests/qemumonitorjsontest.c

index 8eac8edd79d3fd8d2e8ce3596dc550f8f8484fe9..b485c76437b247281e000ab050407abca17000b8 100644 (file)
@@ -1514,7 +1514,8 @@ qemuBuildChardevCommand(virCommand *cmd,
 
     case VIR_DOMAIN_CHR_TYPE_FILE:
     case VIR_DOMAIN_CHR_TYPE_UNIX:
-        qemuFDPassTransferCommand(chrSourcePriv->sourcefd, cmd);
+        if (qemuFDPassTransferCommand(chrSourcePriv->sourcefd, cmd) < 0)
+            return -1;
         break;
 
     case VIR_DOMAIN_CHR_TYPE_NULL:
@@ -1538,7 +1539,8 @@ qemuBuildChardevCommand(virCommand *cmd,
         return -1;
     }
 
-    qemuFDPassTransferCommand(chrSourcePriv->logfd, cmd);
+    if (qemuFDPassTransferCommand(chrSourcePriv->logfd, cmd) < 0)
+        return -1;
 
     if (!(charstr = qemuBuildChardevStr(dev, charAlias)))
         return -1;
@@ -8918,7 +8920,8 @@ qemuBuildInterfaceCommandLine(virQEMUDriver *driver,
         vhostfd[i] = -1;
     }
 
-    qemuFDPassTransferCommand(vdpa, cmd);
+    if (qemuFDPassTransferCommand(vdpa, cmd) < 0)
+        return -1;
 
     if (!(hostnetprops = qemuBuildHostNetProps(net,
                                                tapfdName, tapfdSize,
@@ -9827,8 +9830,11 @@ qemuBuildTPMCommandLine(virCommand *cmd,
         return -1;
     }
 
-    qemuFDPassTransferCommand(passtpm, cmd);
-    qemuFDPassTransferCommand(passcancel, cmd);
+    if (qemuFDPassTransferCommand(passtpm, cmd) < 0)
+        return -1;
+
+    if (qemuFDPassTransferCommand(passcancel, cmd) < 0)
+        return -1;
 
     if (!(tpmdevstr = qemuBuildTPMBackendStr(tpm, passtpm, passcancel)))
         return -1;
index 29370a4bb670be5126f61d50cfd55cc80f8433fc..1af8932bdda333ef3a746e76ff33cc4694f465a9 100644 (file)
@@ -177,14 +177,14 @@ qemuFDPassAddFD(qemuFDPass *fdpass,
  * Pass the fds in @fdpass to a commandline object @cmd. @fdpass may be NULL
  * in which case this is a no-op.
  */
-void
+int
 qemuFDPassTransferCommand(qemuFDPass *fdpass,
                           virCommand *cmd)
 {
     size_t i;
 
     if (!fdpass)
-        return;
+        return 0;
 
     for (i = 0; i < fdpass->nfds; i++) {
         virCommandPassFD(cmd, fdpass->fds[i].fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
@@ -206,6 +206,8 @@ qemuFDPassTransferCommand(qemuFDPass *fdpass,
 
         fdpass->fds[i].fd = -1;
     }
+
+    return 0;
 }
 
 
@@ -265,18 +267,20 @@ qemuFDPassTransferMonitor(qemuFDPass *fdpass,
  * Simulate as if @fdpass was passed via monitor for callers which don't
  * actually wish to test that code path.
  */
-void
+int
 qemuFDPassTransferMonitorFake(qemuFDPass *fdpass)
 {
 
     if (!fdpass)
-        return;
+        return 0;
 
     if (fdpass->useFDSet) {
         fdpass->path = g_strdup_printf("/dev/fdset/monitor-fake");
     } else {
         fdpass->path = g_strdup(fdpass->fds[0].opaque);
     }
+
+    return 0;
 }
 
 
index 6d090392dbb1da9f07713e4324480fd858ca82e3..db16d77ecc2bfe06b853c2d452456f321a6c31b0 100644 (file)
@@ -39,7 +39,7 @@ qemuFDPassAddFD(qemuFDPass *fdpass,
                 int *fd,
                 const char *suffix);
 
-void
+int
 qemuFDPassTransferCommand(qemuFDPass *fdpass,
                           virCommand *cmd);
 
@@ -47,7 +47,7 @@ int
 qemuFDPassTransferMonitor(qemuFDPass *fdpass,
                           qemuMonitor *mon);
 
-void
+int
 qemuFDPassTransferMonitorFake(qemuFDPass *fdpass);
 
 void
index 278d7ba765cbaa5b31c2fa6e070a4f0714203a5f..e15c8533f6955fdac0a049afe45a69053fc0882d 100644 (file)
@@ -743,8 +743,12 @@ qemuMonitorJSONTestAttachChardev(virDomainXMLOption *xmlopt,
 
         chrdev.source = chr;
         ignore_value(testQemuPrepareHostBackendChardevOne(&dev, chr, NULL));
-        qemuFDPassTransferMonitorFake(charpriv->sourcefd);
-        qemuFDPassTransferMonitorFake(charpriv->logfd);
+        if (qemuFDPassTransferMonitorFake(charpriv->sourcefd) < 0)
+            ret = -1;
+
+        if (qemuFDPassTransferMonitorFake(charpriv->logfd) < 0)
+            ret = -1;
+
         CHECK("file", false,
               "{'id':'alias','backend':{'type':'file','data':{'out':'/dev/fdset/monitor-fake',"
                                                              "'append':true,"