[libvirt] [PATCH] qemudDomainMemoryPeek: chown temporary file to qemu.qemu.

Richard W.M. Jones rjones at redhat.com
Fri May 20 14:28:14 UTC 2011


This attached patch resolves a fairly obvious problem which stops
qemuDomainMemoryPeek from working at all.

However, it's not the whole story.  Read on ...

(1) qemu still fails unless I manually set the mode of
/var/cache/libvirt to 0755 (it is normally 0700).

                           Owner      Fails   Works
  /var/cache/libvirt       root.root  0700    0755
  /var/cache/libvirt/qemu  qemu.qemu  0750    0750

qemu is doing:

  open("/var/cache/libvirt/qemu/qemu.mem.fdVCod", O_WRONLY|O_CREAT|O_TRUNC, 0666)

It's kinda annoying that /etc/libvirt and /var/{cache,lib}/libvirt are
unreadable by other users.  Is there some deep reason to do this?

(2) After applying this patch, using virDomainMemoryPeek causes
libvirtd to generate the following serious-looking warning.  It
doesn't appear to crash or fail in any way that I can tell:

  15:17:09.982: 7784: error : virDomainFree:2122 : invalid domain pointer in virDomainFree

I don't know where this is coming from.  It only appears when my
program actually does virDomainMemoryPeek, not when I have the same
code with virDomainMemoryPeek commented out.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://et.redhat.com/~rjones/virt-top
-------------- next part --------------
>From 1a2ba0c1b58142a06602722c6bb0995ef6e8b347 Mon Sep 17 00:00:00 2001
From: Richard W.M. Jones <rjones at redhat.com>
Date: Fri, 20 May 2011 13:56:46 +0100
Subject: [PATCH] qemudDomainMemoryPeek: chown temporary file to qemu.qemu.

Otherwise qemu is unable to write to it, with the error:

libvir: QEMU error : internal error unable to execute QEMU command 'memsave': Could not open '/var/cache/libvirt/qemu/qemu.mem.RRNvLv'
---
 src/qemu/qemu_driver.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 44acc6a..08d2549 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -5536,6 +5536,14 @@ qemudDomainMemoryPeek (virDomainPtr dom,
         goto endjob;
     }
 
+    if (qemu_driver->privileged &&
+        chown(tmp, qemu_driver->user, qemu_driver->group) < 0) {
+        virReportSystemError(errno,
+                             _("unable to set ownership on %s to %d:%d"),
+                             tmp, qemu_driver->user, qemu_driver->group);
+        goto endjob;
+    }
+
     priv = vm->privateData;
     qemuDomainObjEnterMonitor(vm);
     if (flags == VIR_MEMORY_VIRTUAL) {
-- 
1.7.5.1



More information about the libvir-list mailing list