[libvirt] [PATCHv2 4/4] qemu: support the listenNetwork attribute in <graphics>

Eric Blake eblake at redhat.com
Thu Jul 21 23:40:43 UTC 2011


On 07/20/2011 02:11 AM, Laine Stump wrote:
> The domain XML now understands an attribute named "listenNetwork" in
> the<graphics>  element, and the network driver has an internal API
> that will turn a network name into an IP address, so the final logical
> step is to put the glue into the qemu driver such that when it is
> starting up a domain, if it finds "listenNetwork" in the XML, it will
> call the network driver to get an associated IP address, and tell qemu
> to listen for vnc (or spice) on that address rather than the default
> (localhost).

>
> Since this is the commit that turns on the new functionality, I've
> included the doc changes here.

Yay.  Did you ever finish the other doc changes you were promising?

>           } else if (qemuCapsGet(qemuCaps, QEMU_CAPS_VNC_COLON)) {
> -            const char *addr = def->graphics[0]->data.vnc.listenAddr ?
> -                def->graphics[0]->data.vnc.listenAddr :
> -                driver->vncListen;
> -            bool escapeAddr = strchr(addr, ':') != NULL;
> +            int ret;
> +            char *addr;

Uninitialized...

> +            bool freeAddr = false;
> +            bool escapeAddr;
> +
> +            if (def->graphics[0]->data.vnc.listenAddr) {
> +                addr = def->graphics[0]->data.vnc.listenAddr;
> +            } else if (def->graphics[0]->data.vnc.listenNetwork) {
> +                ret = networkGetNetworkAddress(def->graphics[0]->data.vnc.listenNetwork,
> +&addr);

and if networkGetNetworkAddress is stubbed out, addr remains 
uninitialized...

> +                if (ret<= -2) {
> +                    qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                                    "%s", _("listenNetwork not supported, network driver not present"));
> +                }
> +                if (!addr) {

Oops - jump depending on uninit data - valgrind will call you on that! 
Not to mention that it looks odd to use ret <= -2, then !addr.  I would 
have expected ret <= -2, then ret < 0, for consistency.  Simplest fix 
would be to add the missing "goto error;" statement in the ret <= -2 clause.

> +        } else if (def->graphics[0]->data.spice.listenNetwork) {
> +            int ret;
> +            char *addr;
> +
> +            ret = networkGetNetworkAddress(def->graphics[0]->data.spice.listenNetwork,
> +&addr);
> +            if (ret<= -2) {
> +                qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                                "%s", _("listenNetwork not supported, network driver not present"));
> +            }
> +            if (!addr) {

Same problem with addr.

ACK with those fixed.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list