On 10/21/20 4:54 PM, John Ferlan wrote:

On 10/14/20 1:08 PM, Jonathon Jongsma wrote:
add-fd, remove-fd, and query-fdsets provide functionality that can be
used for passing fds to qemu and closing fdsets that are no longer
necessary.

Signed-off-by: Jonathon Jongsma <jjong...@redhat.com>
---
  src/qemu/qemu_monitor.c      |  93 +++++++++++++++++++
  src/qemu/qemu_monitor.h      |  41 +++++++++
  src/qemu/qemu_monitor_json.c | 173 +++++++++++++++++++++++++++++++++++
  src/qemu/qemu_monitor_json.h |  12 +++
  4 files changed, 319 insertions(+)

Coverity indicated a possible RESOURCE_LEAK

+/* if fdset is negative, qemu will create a new fdset and add the fd to that */
+int qemuMonitorJSONAddFileHandleToSet(qemuMonitorPtr mon,
+                                      int fd,
+                                      int fdset,
+                                      const char *opaque,
+                                      qemuMonitorAddFdInfoPtr fdinfo)
+{
+    virJSONValuePtr args = NULL;
+    g_autoptr(virJSONValue) reply = NULL;
+    g_autoptr(virJSONValue) cmd = NULL;
+
+    if (virJSONValueObjectCreate(&args, "S:opaque", opaque, NULL) < 0)
+        return -1;
+
+    if (fdset >= 0)
+        if (virJSONValueObjectAdd(args, "j:fdset-id", fdset, NULL) < 0)
Leaks @args


Yeah, I think args needs to be g_autoptr(virJSONValue)...



+            return -1;
I'm surprised the code style gremlins didn't complain about not having {
} or combining the conditions


(Wasn't watching close enough. I have to admit my eyes glazed over a bit :-P)



+
+    if (!(cmd = qemuMonitorJSONMakeCommandInternal("add-fd", args)))
+        return -1;


... and then here it can be passed as g_steal_pointer(&args) - qemuMonitorJSONMakeCommandInternal() will free it no matter what the outcome.


I think at this point @args is consumed within @cmd ... which really
confuses Coverity, but I have a bunch of hacks to handle that...

John

+
+    if (qemuMonitorJSONCommandWithFd(mon, cmd, fd, &reply) < 0)
+        return -1;
+
+    if (qemuMonitorJSONCheckError(cmd, reply) < 0)
+        return -1;
+
+    if (qemuAddfdInfoParse(reply, fdinfo) < 0)
+        return -1;
+
+    return 0;
+}
+
[...]


Reply via email to