]> xenbits.xensource.com Git - libvirt.git/commitdiff
Do not generate security_model when fs driver is anything but 'path'
authorDeepak C Shetty <deepakcs@linux.vnet.ibm.com>
Tue, 10 Jan 2012 12:53:31 +0000 (18:23 +0530)
committerEric Blake <eblake@redhat.com>
Wed, 11 Jan 2012 20:48:52 +0000 (13:48 -0700)
QEMU does not support security_model for anything but 'path' fs driver type.
Currently in libvirt, when security_model ( accessmode attribute) is not
specified it auto-generates it irrespective of the fs driver type, which
can result in a qemu error for drivers other than path. This patch ensures
that the qemu cmdline is correctly generated by taking into account the
fs driver type.

Signed-off-by: Deepak C Shetty <deepakcs@linux.vnet.ibm.com>
AUTHORS
src/qemu/qemu_command.c
tests/qemuxml2argvdata/qemuxml2argv-fs9p.args
tests/qemuxml2argvdata/qemuxml2argv-fs9p.xml

diff --git a/AUTHORS b/AUTHORS
index d8599ed49c734a7a34e45d0dd420d4ebd9e027d5..b681424bcbc9cb42e66f76703cd3527b24451004 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -214,6 +214,7 @@ Patches have also been contributed by:
   Michael Ellerman     <michael@ellerman.id.au>
   Rommer               <rommer@active.by>
   Yuri Chornoivan      <yurchor@ukr.net>
+  Deepak C Shetty      <deepakcs@linux.vnet.ibm.com>
 
   [....send patches to get your name here....]
 
index 16ffb4c86f17515652a7dc1b72577a27461af557..d05130559dfc5a8d5d94741b76f5fc5caf2d3e88 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * qemu_command.c: QEMU command generation
  *
- * Copyright (C) 2006-2011 Red Hat, Inc.
+ * Copyright (C) 2006-2012 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -2132,12 +2132,23 @@ char *qemuBuildFSStr(virDomainFSDefPtr fs,
     }
     virBufferAdd(&opt, driver, -1);
 
-    if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_MAPPED) {
-        virBufferAddLit(&opt, ",security_model=mapped");
-    } else if(fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) {
-        virBufferAddLit(&opt, ",security_model=passthrough");
-    } else if(fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_SQUASH) {
-        virBufferAddLit(&opt, ",security_model=none");
+    if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_PATH ||
+        fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_DEFAULT) {
+        if (fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_MAPPED) {
+            virBufferAddLit(&opt, ",security_model=mapped");
+        } else if(fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) {
+            virBufferAddLit(&opt, ",security_model=passthrough");
+        } else if(fs->accessmode == VIR_DOMAIN_FS_ACCESSMODE_SQUASH) {
+            virBufferAddLit(&opt, ",security_model=none");
+        }
+    } else {
+        /* For other fs drivers, default(passthru) should always
+         * be supported */
+        if (fs->accessmode != VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH) {
+            qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                        _("only supports passthrough accessmode"));
+            goto error;
+        }
     }
     virBufferAsprintf(&opt, ",id=%s%s", QEMU_FSDEV_HOST_PREFIX, fs->info.alias);
     virBufferAsprintf(&opt, ",path=%s", fs->src);
index 4c498bab576deb5c1af7fa58e5432e5e14251fe2..857981052f3f1ae966f82ce0df2c1b8c08b74197 100644 (file)
@@ -4,7 +4,10 @@ unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda \
 /dev/HostVG/QEMUGuest1 -fsdev local,security_model=passthrough,id=fsdev-fs0,\
 path=/export/to/guest -device virtio-9p-pci,id=fs0,fsdev=fsdev-fs0,\
 mount_tag=/import/from/host,bus=pci.0,addr=0x3 \
--fsdev handle,security_model=mapped,id=fsdev-fs1,\
+-fsdev local,security_model=mapped,id=fsdev-fs1,\
 path=/export/to/guest2 -device virtio-9p-pci,id=fs1,fsdev=fsdev-fs1,\
 mount_tag=/import/from/host2,bus=pci.0,addr=0x4 \
--usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
+-fsdev handle,id=fsdev-fs2,\
+path=/export/to/guest3 -device virtio-9p-pci,id=fs2,fsdev=fsdev-fs2,\
+mount_tag=/import/from/host3,bus=pci.0,addr=0x5 \
+-usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6
index 7ef5923b31e05f2a73ab89247debd39a9d2c9115..07d7e8abe33175c06982af636768f1c2fa2944ba 100644 (file)
       <target dir='/import/from/host'/>
     </filesystem>
     <filesystem accessmode='mapped'>
-      <driver type='handle'/>
+      <driver type='path'/>
       <source dir='/export/to/guest2'/>
       <target dir='/import/from/host2'/>
     </filesystem>
+    <filesystem>
+      <driver type='handle'/>
+      <source dir='/export/to/guest3'/>
+      <target dir='/import/from/host3'/>
+    </filesystem>
   </devices>
 </domain>