Change in vdsm[master]: Fix crash when libvirt refers to non-existing non-bridged in...

asegurap at redhat.com asegurap at redhat.com
Wed Sep 12 16:45:57 UTC 2012


Antoni Segura Puimedon has uploaded a new change for review.

Change subject: Fix crash when libvirt refers to non-existing non-bridged interfaces.
......................................................................

Fix crash when libvirt refers to non-existing non-bridged interfaces.

This fix catches the crash resulting of checking information in sysfs of a
non-existing network reported by libvirt.

Bug-Id: https://bugzilla.redhat.com/856163
Change-Id: I62ed8db99ce5cb10e91c7700b055711beb36e6ae
Signed-off-by: Antoni S. Puimedon <asegurap at redhat.com>
---
M vdsm/netinfo.py
1 file changed, 21 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/66/7966/1

diff --git a/vdsm/netinfo.py b/vdsm/netinfo.py
index caf82de..ee5b687 100644
--- a/vdsm/netinfo.py
+++ b/vdsm/netinfo.py
@@ -250,7 +250,7 @@
             except OSError, e:
                 # If the bridge reported by libvirt does not exist anymore, do
                 # not report it, as this already assures that the bridge is not
-                # added d['networks']
+                # added to d['networks']
                 if e.errno == errno.ENOENT:
                     logging.info('Obtaining info for net %s.', devname,
                                  exc_info=True)
@@ -266,13 +266,25 @@
             # longer supported
             d['networks'][netname]['interface'] = devname
 
-        d['networks'][netname].update({
-                    'iface': devname,
-                    'bridged': nets[netname]['bridged'],
-                    'addr': getaddr(devname),
-                    'netmask': getnetmask(devname),
-                    'gateway': routes.get(devname, '0.0.0.0'),
-                    'mtu': getMtu(devname), })
+        try:
+            d['networks'][netname].update({
+                        'iface': devname,
+                        'bridged': nets[netname]['bridged'],
+                        'addr': getaddr(devname),
+                        'netmask': getnetmask(devname),
+                        'gateway': routes.get(devname, '0.0.0.0'),
+                        'mtu': getMtu(devname), })
+        except OSError, e:
+            if e.errno == errno.ENOENT:
+                logging.info('Obtaining info for net %s.', devname,
+                             exc_info=True)
+                # When a net is not bridged it will have left an entry in
+                # d['networks']
+                if netname in d['networks']:
+                    del d['networks'][netname]
+                continue
+            else:
+                raise
 
     d['bridges'] = dict([(bridge, {
                               'ports': ports(bridge),
@@ -294,7 +306,7 @@
                         for nic in nics() ])
     paddr = permAddr()
     for nic, nd in d['nics'].iteritems():
-        if paddr.get(nic):
+        if nic in paddr:
             nd['permhwaddr'] = paddr[nic]
     d['bondings'] = dict([ (bond, {'slaves': slaves(bond),
                               'addr': getaddr(bond),


--
To view, visit http://gerrit.ovirt.org/7966
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I62ed8db99ce5cb10e91c7700b055711beb36e6ae
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap at redhat.com>


More information about the vdsm-patches mailing list