[libvirt] [PATCH 1/2] conf: only accept capabilities mode hostdev in LXC.

Jincheng Miao jmiao at redhat.com
Thu Jun 19 09:45:12 UTC 2014


hostdev has mode "capabilities" for LXC, from formatdomain.html:
"
Block / character devices from the host can be passed through to
the guest using the hostdev element.
This is only possible with container based virtualization.
since after 1.0.1 for LXC
"
So forbid capabilities mode hostdev if domain is not LXC.

The related bug is:
https://bugzilla.redhat.com/show_bug.cgi?id=1111044

Signed-off-by: Jincheng Miao <jmiao at redhat.com>
---
 src/conf/domain_conf.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 4114289..5ae6614 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -9574,6 +9574,12 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
             goto error;
         break;
     case VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES:
+        if (vmdef->virtType != VIR_DOMAIN_VIRT_LXC) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Unsupported capabilities mode hostdev in %s"),
+                           virDomainVirtTypeToString(vmdef->virtType));
+            goto error;
+        }
         /* parse managed/mode/type, and the <source> element */
         if (virDomainHostdevDefParseXMLCaps(node, ctxt, type, def) < 0)
             goto error;
@@ -9596,7 +9602,7 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
         case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
             if (def->info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
                 def->info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                virReportError(VIR_ERR_XML_DETAIL, "%s",
                                _("PCI host devices must use 'pci' address type"));
                 goto error;
             }
@@ -9605,7 +9611,7 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
             if (def->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
                 virDomainHostdevAssignAddress(xmlopt, vmdef, def) < 0) {
 
-                virReportError(VIR_ERR_XML_ERROR, "%s",
+                virReportError(VIR_ERR_XML_DETAIL, "%s",
                                _("SCSI host devices must have address specified"));
                 goto error;
             }
-- 
1.8.3.1




More information about the libvir-list mailing list