qemu: cgroup: Don't use NULL path on default backed RNGs

The "random" backend for virtio-rng can be started with no path
specified which equals to /dev/random. The cgroup code didn't consider
this and called few of the functions with NULL resulting into:

 $ virsh start rng-vm
 error: Failed to start domain rng-vm
 error: Path '(null)' is not accessible: Bad address

Problem introduced by commit c6320d3463
This commit is contained in:
Peter Krempa 2014-07-24 15:47:39 +02:00
parent 3d968f409f
commit 99ff49eed1

View File

@ -587,10 +587,16 @@ qemuSetupDevicesCgroup(virQEMUDriverPtr driver,
if (vm->def->rng && if (vm->def->rng &&
(vm->def->rng->backend == VIR_DOMAIN_RNG_BACKEND_RANDOM)) { (vm->def->rng->backend == VIR_DOMAIN_RNG_BACKEND_RANDOM)) {
VIR_DEBUG("Setting Cgroup ACL for RNG device"); VIR_DEBUG("Setting Cgroup ACL for RNG device");
rv = virCgroupAllowDevicePath(priv->cgroup, vm->def->rng->source.file, const char *rngpath = vm->def->rng->source.file;
/* fix path when using the default */
if (!rngpath)
rngpath = "/dev/random";
rv = virCgroupAllowDevicePath(priv->cgroup, rngpath,
VIR_CGROUP_DEVICE_RW); VIR_CGROUP_DEVICE_RW);
virDomainAuditCgroupPath(vm, priv->cgroup, "allow", virDomainAuditCgroupPath(vm, priv->cgroup, "allow",
vm->def->rng->source.file, "rw", rv == 0); rngpath, "rw", rv == 0);
if (rv < 0 && if (rv < 0 &&
!virLastErrorIsSystemErrno(ENOENT)) !virLastErrorIsSystemErrno(ENOENT))
goto cleanup; goto cleanup;