diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ff4e977a18..1c02e5802b 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7781,13 +7781,16 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg, } static int -qemuBuildVhostuserCommandLine(virCommandPtr cmd, +qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver, + virLogManagerPtr logManager, + virCommandPtr cmd, virDomainDefPtr def, virDomainNetDefPtr net, virQEMUCapsPtr qemuCaps, unsigned int bootindex) { - virBuffer chardev_buf = VIR_BUFFER_INITIALIZER; + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + char *chardev = NULL; virBuffer netdev_buf = VIR_BUFFER_INITIALIZER; unsigned int queues = net->driver.virtio.queues; char *nic = NULL; @@ -7800,9 +7803,10 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd, switch ((virDomainChrType) net->data.vhostuser->type) { case VIR_DOMAIN_CHR_TYPE_UNIX: - virBufferAsprintf(&chardev_buf, "socket,id=char%s,path=%s%s", - net->info.alias, net->data.vhostuser->data.nix.path, - net->data.vhostuser->data.nix.listen ? ",server" : ""); + if (!(chardev = qemuBuildChrChardevStr(logManager, cmd, cfg, def, + net->data.vhostuser, + net->info.alias, qemuCaps, false))) + goto error; break; case VIR_DOMAIN_CHR_TYPE_NULL: @@ -7820,7 +7824,7 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd, case VIR_DOMAIN_CHR_TYPE_LAST: virReportError(VIR_ERR_INTERNAL_ERROR, _("vhost-user type '%s' not supported"), - virDomainChrTypeToString(net->data.vhostuser->type)); + virDomainChrTypeToString(net->data.vhostuser->type)); goto error; } @@ -7838,7 +7842,8 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd, } virCommandAddArg(cmd, "-chardev"); - virCommandAddArgBuffer(cmd, &chardev_buf); + virCommandAddArg(cmd, chardev); + VIR_FREE(chardev); virCommandAddArg(cmd, "-netdev"); virCommandAddArgBuffer(cmd, &netdev_buf); @@ -7852,11 +7857,13 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd, virCommandAddArgList(cmd, "-device", nic, NULL); VIR_FREE(nic); + virObjectUnref(cfg); return 0; error: - virBufferFreeAndReset(&chardev_buf); + virObjectUnref(cfg); + VIR_FREE(chardev); virBufferFreeAndReset(&netdev_buf); VIR_FREE(nic); @@ -7864,8 +7871,9 @@ qemuBuildVhostuserCommandLine(virCommandPtr cmd, } static int -qemuBuildInterfaceCommandLine(virCommandPtr cmd, - virQEMUDriverPtr driver, +qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver, + virLogManagerPtr logManager, + virCommandPtr cmd, virDomainDefPtr def, virDomainNetDefPtr net, virQEMUCapsPtr qemuCaps, @@ -7885,7 +7893,6 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, char **tapfdName = NULL; char **vhostfdName = NULL; virDomainNetType actualType = virDomainNetGetActualType(net); - virQEMUDriverConfigPtr cfg = NULL; virNetDevBandwidthPtr actualBandwidth; size_t i; @@ -7928,8 +7935,6 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, return -1; } - cfg = virQEMUDriverGetConfig(driver); - switch (actualType) { case VIR_DOMAIN_NET_TYPE_NETWORK: case VIR_DOMAIN_NET_TYPE_BRIDGE: @@ -7989,7 +7994,8 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, break; case VIR_DOMAIN_NET_TYPE_VHOSTUSER: - ret = qemuBuildVhostuserCommandLine(cmd, def, net, qemuCaps, bootindex); + ret = qemuBuildVhostuserCommandLine(driver, logManager, cmd, def, + net, qemuCaps, bootindex); goto cleanup; break; @@ -8162,7 +8168,6 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, VIR_FREE(host); VIR_FREE(tapfdName); VIR_FREE(vhostfdName); - virObjectUnref(cfg); return ret; } @@ -8172,8 +8177,9 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, * API domainSetSecurityTapFDLabel that doesn't use the const format. */ static int -qemuBuildNetCommandLine(virCommandPtr cmd, - virQEMUDriverPtr driver, +qemuBuildNetCommandLine(virQEMUDriverPtr driver, + virLogManagerPtr logManager, + virCommandPtr cmd, virDomainDefPtr def, virQEMUCapsPtr qemuCaps, virNetDevVPortProfileOp vmop, @@ -8211,7 +8217,7 @@ qemuBuildNetCommandLine(virCommandPtr cmd, else vlan = i; - if (qemuBuildInterfaceCommandLine(cmd, driver, def, net, + if (qemuBuildInterfaceCommandLine(driver, logManager, cmd, def, net, qemuCaps, vlan, bootNet, vmop, standalone, nnicindexes, nicindexes) < 0) @@ -9438,7 +9444,8 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, if (qemuBuildFSDevCommandLine(cmd, def, qemuCaps) < 0) goto error; - if (qemuBuildNetCommandLine(cmd, driver, def, qemuCaps, vmop, standalone, + if (qemuBuildNetCommandLine(driver, logManager, cmd, def, + qemuCaps, vmop, standalone, nnicindexes, nicindexes, &bootHostdevNet) < 0) goto error;