On Thu, Jul 10, 2025 at 04:46:34PM +0100, Peter Maydell wrote:
> Hi; Coverity complains about a potential filedescriptor leak in
> net/vhost-vdpa.c:net_init_vhost_vdpa(). This is CID 1490785.
> 
> Specifically, in this function we do:
>     queue_pairs = vhost_vdpa_get_max_queue_pairs(vdpa_device_fd, features,
>                                                  &has_cvq, errp);
>     if (queue_pairs < 0) {
>         [exit with failure]
>     }
>     ...
>     ncs = g_malloc0(sizeof(*ncs) * queue_pairs);
>     for (i = 0; i < queue_pairs; i++) {
>        ...
>        ncs[i] = net_vhost_vdpa_init(..., vdpa_device_fd, ...)
>        ...
>     }
>     if (has_cvq) {
>        ...
>        nc = net_host_vdpa_init(..., vdpa_device_fd, ...)
>        ...
>     }
> 
> So if queue_pairs is zero we will malloc(0) which seems dubious;
> and if queue_pairs is zero and has_cvq is false then the init
> function will exit success without ever calling net_vhost_vdpa_init()
> and it will leak the vdpa_device_fd.
> 
> My guess is that queue_pairs == 0 should be an error, or possibly
> that (queue_pairs == 0 && !has_cvq) should be an error.
> 
> Could somebody who knows more about this code tell me which, and
> perhaps produce a patch to make it handle that case?

Historically queue_pairs == 0 was always same as 1, IIRC.

> Q: should this file be listed in the "vhost" subcategory of MAINTAINERS?
> At the moment it only gets caught by "Network device backends".
> 
> thanks
> -- PMM


This so.


Reply via email to