[libvirt PATCH v5 4/6] qemu: add monitor functions for handling file descriptors

John Ferlan jferlan at redhat.com
Wed Oct 21 20:54:43 UTC 2020



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 at 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;
> +}
> +

[...]




More information about the libvir-list mailing list