[libvirt] [PATCHv2 4/4] qemu: support the listenNetwork attribute in <graphics>
Laine Stump
laine at laine.org
Fri Jul 22 03:58:56 UTC 2011
On 07/21/2011 07:40 PM, Eric Blake wrote:
> 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?
Not yet, but before the end of Friday.
>
>> } 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.
>
Okay, I fixed those up, but am waiting to push until the new
prerequisite patch is pushed (changing the returns of functions in
util/interface.c to be < 0 on error).
More information about the libvir-list
mailing list