[libvirt] [PATCHv2] network: get vlan info for Open vSwitch interfaces from proper source

Daniel Veillard veillard at redhat.com
Thu Aug 30 10:12:57 UTC 2012


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 at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list