]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: RNG: Always fill in default random source path for default backend
authorPeter Krempa <pkrempa@redhat.com>
Fri, 25 Jul 2014 08:00:49 +0000 (10:00 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 28 Jul 2014 08:07:09 +0000 (10:07 +0200)
Libvirt documents that the default entropy source for the 'random'
backend of a RNG device is /dev/random. Instead of storing and
propagating NULL across our code and checking it in multiple places fill
the default in the post parse callback and use that in the other places.

src/conf/domain_audit.c
src/conf/domain_conf.c
src/qemu/qemu_cgroup.c
src/qemu/qemu_command.c
tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-default.args
tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-multiple.args

index 2d1b1fb898a979bc94a83c86ee8e742cee8187b9..93625fc19b59b6b6f5fc46f8b26ad3cde2ff7491 100644 (file)
@@ -253,10 +253,7 @@ virDomainAuditRNG(virDomainObjPtr vm,
     if (newDef) {
         switch ((virDomainRNGBackend) newDef->backend) {
         case VIR_DOMAIN_RNG_BACKEND_RANDOM:
-            if (newDef->source.file)
-                newsrcpath = newDef->source.file;
-            else
-                newsrcpath = "/dev/random";
+            newsrcpath = newDef->source.file;
             break;
 
         case VIR_DOMAIN_RNG_BACKEND_EGD:
@@ -271,10 +268,7 @@ virDomainAuditRNG(virDomainObjPtr vm,
     if (oldDef) {
         switch ((virDomainRNGBackend) oldDef->backend) {
         case VIR_DOMAIN_RNG_BACKEND_RANDOM:
-            if (oldDef->source.file)
-                oldsrcpath = oldDef->source.file;
-            else
-                oldsrcpath = "/dev/random";
+            oldsrcpath = oldDef->source.file;
             break;
 
         case VIR_DOMAIN_RNG_BACKEND_EGD:
index 9c3cd8af9916d2f2e6f368dcf861969ff8ea24f7..910f6e22d531e806147efcc71c853b8f35e4e0d4 100644 (file)
@@ -3057,6 +3057,14 @@ virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
         }
     }
 
+    /* set default path for virtio-rng "random" backend to /dev/random */
+    if (dev->type == VIR_DOMAIN_DEVICE_RNG &&
+        dev->data.rng->backend == VIR_DOMAIN_RNG_BACKEND_RANDOM &&
+        !dev->data.rng->source.file) {
+        if (VIR_STRDUP(dev->data.rng->source.file, "/dev/random") < 0)
+            return -1;
+    }
+
     return 0;
 }
 
@@ -16546,11 +16554,7 @@ virDomainRNGDefFormat(virBufferPtr buf,
 
     switch ((virDomainRNGBackend) def->backend) {
     case VIR_DOMAIN_RNG_BACKEND_RANDOM:
-        if (def->source.file)
-            virBufferEscapeString(buf, ">%s</backend>\n", def->source.file);
-        else
-            virBufferAddLit(buf, "/>\n");
-
+        virBufferEscapeString(buf, ">%s</backend>\n", def->source.file);
         break;
 
     case VIR_DOMAIN_RNG_BACKEND_EGD:
index 419be9a71eae4346386f3ddcf7d89f27b05db262..43d14d49e1018a33a6a09f7fb0febf158d0b6141 100644 (file)
@@ -587,16 +587,12 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
     for (i = 0; i < vm->def->nrngs; i++) {
         if (vm->def->rngs[i]->backend == VIR_DOMAIN_RNG_BACKEND_RANDOM) {
             VIR_DEBUG("Setting Cgroup ACL for RNG device");
-            const char *rngpath = vm->def->rngs[i]->source.file;
-
-            /* fix path when using the default */
-            if (!rngpath)
-                rngpath = "/dev/random";
-
-            rv = virCgroupAllowDevicePath(priv->cgroup, rngpath,
+            rv = virCgroupAllowDevicePath(priv->cgroup,
+                                          vm->def->rngs[i]->source.file,
                                           VIR_CGROUP_DEVICE_RW);
             virDomainAuditCgroupPath(vm, priv->cgroup, "allow",
-                                     rngpath, "rw", rv == 0);
+                                     vm->def->rngs[i]->source.file,
+                                     "rw", rv == 0);
             if (rv < 0 &&
                 !virLastErrorIsSystemErrno(ENOENT))
                 goto cleanup;
index 7f9357c9af7f56858cd7d00b95e3fe4cbfd9ed73..cdf77401c92181a3461a29b05b1efa0ea533ee57 100644 (file)
@@ -5626,9 +5626,8 @@ qemuBuildRNGBackendArgs(virCommandPtr cmd,
             goto cleanup;
         }
 
-        virBufferAsprintf(&buf, "rng-random,id=%s", dev->info.alias);
-        if (dev->source.file)
-            virBufferAsprintf(&buf, ",filename=%s", dev->source.file);
+        virBufferAsprintf(&buf, "rng-random,id=%s,filename=%s",
+                          dev->info.alias, dev->source.file);
 
         virCommandAddArg(cmd, "-object");
         virCommandAddArgBuffer(cmd, &buf);
index 4ae6257f7f2f5f3f70a8299095716b5281ef81de..58cc473263b05aaa8aa63ae2e0eff60442c7ccf4 100644 (file)
@@ -3,5 +3,5 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
 -S -M pc -m 214 -smp 1 -nographic -nodefaults \
 -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \
 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
--object rng-random,id=rng0 \
+-object rng-random,id=rng0,filename=/dev/random \
 -device virtio-rng-pci,rng=rng0,bus=pci.0,addr=0x7
index 1082ede6a749248b08f839bd63729e059e70a752..d1faf09e2acb06046dfe9e9b47ffb2c288ad39c8 100644 (file)
@@ -3,7 +3,8 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test QEMU_AUDIO_DRV=none \
 -M pc -m 214 -smp 1 -nographic -nodefaults \
 -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \
 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \
--object rng-random,id=rng0 -device virtio-rng-pci,rng=rng0,bus=pci.0,addr=0x7 \
+-object rng-random,id=rng0,filename=/dev/random \
+-device virtio-rng-pci,rng=rng0,bus=pci.0,addr=0x7 \
 -chardev socket,id=charrng1,host=1.2.3.4,port=1234 \
 -object rng-egd,chardev=charrng1,id=rng1 \
 -device virtio-rng-pci,rng=rng1,bus=pci.0,addr=0x4