[libvirt] [PATCH 1/2] network: make networkCreateInterfacePool more robust
Eric Blake
eblake at redhat.com
Mon Aug 11 20:16:17 UTC 2014
On 08/11/2014 12:59 PM, Laine Stump wrote:
> networkCreateInterfacePool was a bit loose in its error cleanup, which
> could result in a network definition with interfaces in the pool that
> were NULL. This would in turn lead to a libvirtd crash when a guest
> tried to attach an interface using the network with that pool.
>
> In particular this would happen when creating a pool to be used for
> macvtap connections. macvtap needs the netdev name of the virtual
> function in order to use it, and each VF only has a netdev name if it
> is currently bound to a network driver. If one of the VFs of a PF
> happened to be bound to the pci-stub or vfio-pci driver (indicating
> it's already in use for PCI passthrough), or no driver at all, it
> would have no name. In this case networkCreateInterfacePool would
> return an error, but would leave the netdef->forward.nifs set to the
> total number of VFs in the PF. The interface attach that triggered
> calling of networkCreateInterfacePool (it uses a "lazy fill" strategy)
> would simply fail, but the very next attempt to attach an interface
> using the same network pool would result in a crash.
>
> This patch refactors networkCreateInterfacePool to bring it more in
> line with current coding practices (label name, use of a switch with
> no default case) as well as providing the following two changes to
> behavior:
>
> 1) If a VF with no netdev name is encountered, just log a warning and
> continue; only fail if exactly 0 devices are found to put in the pool.
>
> 2) If the function fails, clean up any partial interface pool and set
> netdef->forward.nifs to 0.
>
> This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1111455
> ---
> src/network/bridge_driver.c | 113 ++++++++++++++++++++++++++++----------------
> 1 file changed, 73 insertions(+), 40 deletions(-)
ACK with nit fixed:
> + cleanup:
> + if (ret < 0) {
> + /* free all the entries made before error */
> + for (i= 0; i < netdef->forward.nifs; i++) {
Space before =
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 539 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140811/5f131b35/attachment-0001.sig>
More information about the libvir-list
mailing list