From: Laine Stump Date: Mon, 10 Aug 2015 06:05:29 +0000 (-0400) Subject: qemu: fail on attempts to use for non-tap network connections X-Git-Tag: v1.2.19-rc1~123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4f1d18dc464a4fd436ce9cdd18d6f06fa7494e5;p=thirdparty%2Flibvirt.git qemu: fail on attempts to use for non-tap network connections nwfilter uses iptables and ebtables, which only work properly on tap-based network connections (*not* on macvtap, for example), but we just ignore any elements for other types of networks, potentially giving users a false sense of security. This patch checks the network type and fails/logs an error if any domain has a when the connection isn't using a tap device. This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1180011 --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 87468ca26f..ae0361840a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -8588,6 +8588,17 @@ qemuBuildInterfaceCommandLine(virCommandPtr cmd, return -1; } + /* and only TAP devices support nwfilter rules */ + if (net->filter && + !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK || + actualType == VIR_DOMAIN_NET_TYPE_BRIDGE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("filterref is not supported for " + "network interfaces of type %s"), + virDomainNetTypeToString(actualType)); + return -1; + } + if (net->backend.tap && !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK || actualType == VIR_DOMAIN_NET_TYPE_BRIDGE)) { diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 1ea397f4ea..aabdb789c5 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -910,6 +910,17 @@ int qemuDomainAttachNetDevice(virConnectPtr conn, return -1; } + /* and only TAP devices support nwfilter rules */ + if (net->filter && + !(actualType == VIR_DOMAIN_NET_TYPE_NETWORK || + actualType == VIR_DOMAIN_NET_TYPE_BRIDGE)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("filterref is not supported for " + "network interfaces of type %s"), + virDomainNetTypeToString(actualType)); + return -1; + } + if (actualType == VIR_DOMAIN_NET_TYPE_BRIDGE || actualType == VIR_DOMAIN_NET_TYPE_NETWORK) { tapfdSize = vhostfdSize = net->driver.virtio.queues;