On Thu, Aug 30, 2012 at 05:14:32AM -0400, Laine Stump wrote: > This bug was revealed by the crash described in > > https://bugzilla.redhat.com/show_bug.cgi?id=852383 > > The vlan info pointer sent to virNetDevOpenvswitchAddPort should never > be non-NULL unless there is at least one tag. The factthat such a vlan > info pointer was receveid pointed out that a caller was passing the > wrong pointer. Instead of sending &net->vlan, the result of > virDomainNetGetActualVlan(net) should be sent - that function will > look for vlan info in net->data.network.actual->vlan, and in cany case > return NULL instead of a pointer if the vlan info it finds has no > tags. > > Aside from causing the crash, sending a hardcoded &net->vlan has the > effect of ignoring vlan info from a <network> or <portgroup> config. > --- > > Difference from V1: fix vlan arg in lcx_process.c too. > > > src/lxc/lxc_process.c | 2 +- > src/qemu/qemu_command.c | 2 +- > src/uml/uml_conf.c | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c > index cdbf14b..bcd59cb 100644 > --- a/src/lxc/lxc_process.c > +++ b/src/lxc/lxc_process.c > @@ -325,7 +325,7 @@ static int virLXCProcessSetupInterfaceBridged(virConnectPtr conn, > > if (vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) > ret = virNetDevOpenvswitchAddPort(brname, parentVeth, &net->mac, > - vm->uuid, vport, &net->vlan); > + vm->uuid, vport, virDomainNetGetActualVlan(net)); > else > ret = virNetDevBridgeAddPort(brname, parentVeth); > if (ret < 0) > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 8c32a4d..25f2451 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -258,7 +258,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def, > err = virNetDevTapCreateInBridgePort(brname, &net->ifname, &net->mac, > def->uuid, &tapfd, > virDomainNetGetActualVirtPortProfile(net), > - &net->vlan, > + virDomainNetGetActualVlan(net), > tap_create_flags); > virDomainAuditNetDevice(def, net, "/dev/net/tun", tapfd >= 0); > if (err < 0) { > diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c > index 5461b42..410f3e2 100644 > --- a/src/uml/uml_conf.c > +++ b/src/uml/uml_conf.c > @@ -141,7 +141,7 @@ umlConnectTapDevice(virConnectPtr conn, > if (virNetDevTapCreateInBridgePort(bridge, &net->ifname, &net->mac, > vm->uuid, NULL, > virDomainNetGetActualVirtPortProfile(net), > - &net->vlan, > + virDomainNetGetActualVlan(net), > VIR_NETDEV_TAP_CREATE_IFUP) < 0) { > if (template_ifname) > VIR_FREE(net->ifname); Okay, ACK, pushed ! thanks ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list