
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 <jjongsma@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
+ return -1;
I'm surprised the code style gremlins didn't complain about not having { } or combining the conditions
+ + if (!(cmd = qemuMonitorJSONMakeCommandInternal("add-fd", args))) + return -1;
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; +} +
[...]