Blob Blame History Raw
From ecfbbe86d4d700201e81c093be30c0933f453d18 Mon Sep 17 00:00:00 2001
Message-Id: <ecfbbe86d4d700201e81c093be30c0933f453d18.1378475168.git.jdenemar@redhat.com>
From: Peter Krempa <pkrempa@redhat.com>
Date: Thu, 5 Sep 2013 10:06:38 +0200
Subject: [PATCH] conf: Don't deref NULL actual network in
 virDomainNetGetActualHostdev()

https://bugzilla.redhat.com/show_bug.cgi?id=1003537

In commit 991270db99690 I've used virDomainNetGetActualHostdev() to get
the actual hostdev from a network when removing the network from the
list to avoid leaving the hostdev in the list. I didn't notice that this
function doesn't check if the actual network is allocated and
dereferences it. This crashes the daemon when cleaning up a domain
object in early startup phases when the actual network definition isn't
allocated. When the actual definition isn't present, the hostdev that
might correspond to it won't be present anyways so it's safe to return
NULL.

Thanks to Cole Robinson for noticing this problem.

(cherry picked from commit a3d24862df9d717b95fae3951019fa150a9d4e09)
---
 src/conf/domain_conf.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 7a80508..53daf73 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -17799,6 +17799,7 @@ virDomainNetGetActualHostdev(virDomainNetDefPtr iface)
     if (iface->type == VIR_DOMAIN_NET_TYPE_HOSTDEV)
         return &iface->data.hostdev.def;
     if (iface->type == VIR_DOMAIN_NET_TYPE_NETWORK &&
+        iface->data.network.actual &&
         iface->data.network.actual->type == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
         return &iface->data.network.actual->data.hostdev.def;
     }
-- 
1.8.3.2