[libvirt] [PATCH v2] qemuOpenVhostNet: Decrease vhostfdSize on open failure

Laine Stump laine at laine.org
Tue May 28 16:43:26 UTC 2013


On 05/27/2013 02:44 AM, Michal Privoznik wrote:
> Currently, if there's an error opening /dev/vhost-net (e.g. because
> it doesn't exist) but it's not required we proceed with vhostfd array
> filled with -1 and vhostfdSize unchanged. Later, when constructing
> the qemu command line only non-negative items within vhostfd array
> are taken into account. This means, vhostfdSize may be greater than
> the actual count of non-negative items in vhostfd array. This results
> in improper command line arguments being generated, e.g.:
>
> -netdev tap,fd=21,id=hostnet0,vhost=on,vhostfd=(null)
> ---
>  src/qemu/qemu_command.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 0373626..c4a162a 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -486,6 +486,10 @@ qemuOpenVhostNet(virDomainDefPtr def,
>                                         "but is unavailable"));
>                  goto error;
>              }
> +            VIR_WARN("Unable to open vhost-net. Opened so far %d, requested %d",
> +                     i, *vhostfdSize);
> +            *vhostfdSize = i;
> +            break;
>          }
>      }
>      virDomainAuditNetDevice(def, net, "/dev/vhost-net", *vhostfdSize);
> @@ -6560,12 +6564,10 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd,
>      }
>  
>      for (i = 0; i < vhostfdSize; i++) {
> -        if (vhostfd[i] >= 0) {
> -            virCommandTransferFD(cmd, vhostfd[i]);
> -            if (virAsprintf(&vhostfdName[i], "%d", vhostfd[i]) < 0) {
> -                virReportOOMError();
> -                goto cleanup;
> -            }
> +        virCommandTransferFD(cmd, vhostfd[i]);
> +        if (virAsprintf(&vhostfdName[i], "%d", vhostfd[i]) < 0) {
> +            virReportOOMError();
> +            goto cleanup;
>          }
>      }
>  

ACK.




More information about the libvir-list mailing list