[libvirt] [PATCH] virsh: do not unlink NULL file

Marc-André Lureau marcandre.lureau at gmail.com
Sat Oct 1 01:05:13 UTC 2011


error:could not take a screenshot of xp
==6216== Syscall param unlink(pathname) points to unaddressable byte(s)
==6216==    at 0x373A0D4937: unlink (syscall-template.S:82)
==6216==    by 0x40FD73: cmdScreenshot (virsh.c:3070)
==6216==    by 0x42BA0D: vshCommandRun (virsh.c:14920)
==6216==    by 0x42EC97: main (virsh.c:16379)
==6216==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==6216==
error:Requested operation is not valid: domain is not running
---
 tools/virsh.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 1909dce..89d355f 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -3004,7 +3004,7 @@ cmdScreenshot(vshControl *ctl, const vshCmd *cmd)
     unsigned int screen = 0;
     unsigned int flags = 0; /* currently unused */
     int ret = false;
-    bool created = true;
+    bool created = false;
     bool generated = false;
     char *mime = NULL;
 
@@ -3039,13 +3039,13 @@ cmdScreenshot(vshControl *ctl, const vshCmd *cmd)
     }
 
     if ((fd = open(file, O_WRONLY|O_CREAT|O_EXCL, 0666)) < 0) {
-        created = false;
         if (errno != EEXIST ||
             (fd = open(file, O_WRONLY|O_TRUNC, 0666)) < 0) {
             vshError(ctl, _("cannot create file %s"), file);
             goto cleanup;
         }
-    }
+    } else
+        created = true;
 
     if (virStreamRecvAll(st, vshStreamSink, &fd) < 0) {
         vshError(ctl, _("could not receive data from domain %s"), name);
-- 
1.7.6.2




More information about the libvir-list mailing list